查看目录中的所有文件,查看每一行,如果该行以“ This
”之类的单词开头,则搜索该行以查找并替换目标单词。我确实得到了一个解决方案,因为它是一个单行命令,但如果可能的话,希望将它作为 perl 文件或使用 bash 的 .txt 文件。
例子:
This rabbit jumped high
The rabbit jumped high
(如果该行以“This:
This rabbit jumped low
The rabbit jumped high
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
如果要替换单词“high”而不是文本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
您可以将单行命令放在 bash 脚本中。
单行命令是什么,它有什么问题,你翻译它的困难是什么?有一个解决方案而不与我们分享,同时要求我们以不同的方式复制解决方案,这是一种粗鲁的做法。
在 中执行此操作会非常复杂bash
,但 shell 的强大之处在于它们能够调用其他程序(例如 Perl)来完成繁重的工作。
如果每行最多只能有一个目标词:
perl -pe's/^This\b.*\K\bhigh\b/low/'
否则,
perl -pe's/\bhigh\b/low/ if /^This\b/'
笔记:
\K
替换之后的内容。(“K”代表“保持”)。\b
有助于确保“This”和“high”不是另一个词的一部分(如“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).