我有这个输入文件:
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
))。