-3

查看目录中的所有文件,查看每一行,如果该行以“ This”之类的单词开头,则搜索该行以查找并替换目标单词。我确实得到了一个解决方案,因为它是一个单行命令,但如果可能的话,希望将它作为 perl 文件或使用 bash 的 .txt 文件。

例子:

This rabbit jumped high

The rabbit jumped high

(如果该行以“This:

This rabbit jumped low

The rabbit jumped high
4

3 回答 3

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

如果要替换单词“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
于 2013-05-04T22:41:30.383 回答
2

您可以将单行命令放在 bash 脚本中。

单行命令是什么,它有什么问题,你翻译它的困难是什么?有一个解决方案而不与我们分享,同时要求我们以不同的方式复制解决方案,这是一种粗鲁的做法。

于 2013-05-04T22:36:54.990 回答
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有助于确保“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).
于 2013-05-05T03:35:35.873 回答