如果一行以特定单词开头,如果该行确实存在,如何更改该行中的目标单词?

时间:2013-05-04 22:33:59

标签: perl bash

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

示例:

This rabbit jumped high

The rabbit jumped high

(如果该行以“This:

开头,则查找并替换从高到低
This rabbit jumped low

The rabbit jumped high

3 个答案:

答案 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).