要搜索目录中的所有文件,查看每一行,如果该行以“This
”之类的单词开头,则搜索该行以查找并替换目标词。我确实得到了一个单线命令的解决方案,但是如果可能的话,希望将它作为perl文件或使用bash的.txt文件。
示例:
This rabbit jumped high
The rabbit jumped high
(如果该行以“This:
开头,则查找并替换从高到低This rabbit jumped low
The rabbit jumped high
答案 0 :(得分:3)
sed '/^This/{s/high/low/g}' file
会为你做的:
kent$ echo "This rabbit jumped high
The rabbit jumped high"|sed '/^This/{s/high/low/g}'
This rabbit jumped low
The rabbit jumped high
如果您想替换字“高”代替文字高:
sed '/^This/{s/\<high\>/low/g}' file
例如:
kent$ echo "This rabbit jumped high with highfoo
The rabbit jumped high"|sed '/^This/{s/\<high\>/low/g}'
This rabbit jumped low with highfoo
The rabbit jumped high
答案 1 :(得分:2)
您可以将一行命令放在bash脚本中。
一行命令是什么,它有什么问题,你翻译它有什么困难?在要求我们以不同的方式复制解决方案时,有一个解决方案并且不与我们分享是一种粗鲁的行为。
答案 2 :(得分:1)
在bash
中执行此操作会非常复杂,但shell的强大之处在于它们能够调用其他程序(例如Perl)来完成繁重的工作。
如果每行最多只能有一个目标词:
perl -pe's/^This\b.*\K\bhigh\b/low/'
否则,
perl -pe's/\bhigh\b/low/ if /^This\b/'
注意:
\K
之后的内容。 (“保持”的“K”)。\b
有助于确保“此”和“高”不是另一个词的一部分(如“thight”)。用法:
perl -pe'...' # From STDIN to STDOUT
perl -pe'...' file # From file(s) to STDOUT
perl -i~ -pe'...' file # Edit file(s) "in-place" (with backup).
perl -i -pe'...' file # Edit file(s) "in-place" (without backup).