perl 命令:仅在第一次出现时添加一行文本

perl 命令:仅在第一次出现时添加一行文本

我有这个输入文件:

text1
match
text2
match
text3

我有这个命令:

perl -lpe 'print "prepend_me" if /^match$/' text.txt

其输出为:

text1
prepend_me
match
text2
prepend_me
match
text3

但我想要:

text1
prepend_me
match
text2
match
text3

我如何获得它?

答案1

只需计算已匹配的次数,并仅在第一次匹配时将其作为前缀:

perl -lpe 'print "prepend_me" if /^match$/ && ++$count == 1' text.txt

答案2

你也可以这样做sed

sed '0,/match/ s/\(match\)/prepend_me\n\1/' text.txt
  • 0,/match/用于编辑从开头 ( 0) 到第一个匹配match( /match/) 的文本。

  • s/\(match\)/prepend_me\n\1/捕获match( \(match\)) 并将其替换为所需文本 ( prepend_me+ 换行符 ( \n) + 捕获的匹配 ( \1))。

相关内容