在特定模式下方或上方的几处插入一行

时间:2019-07-19 15:53:02

标签: bash awk sed

我有这段文字:

bar


eor
mv foo bar

我想在mv上方插入2或3行,因为eor会在文件中重复,而我只需要添加一次即可。

我尝试过:

sed -i '/mv/2i \this' file

我尝试了一些awk变体,例如:

awk '/mv/ { print; print "new line"; previous }2'
这些工作都没有。在此先感谢您的帮助

2 个答案:

答案 0 :(得分:2)

$ awk 'NR==FNR{if (/mv/) tgt=NR-2; next} FNR==tgt{print "new stuff"} 1' file file
bar

new stuff

eor
mv foo bar

答案 1 :(得分:0)

这可能对您有用(GNU sed):

sed -e ':a;N;s/\n/&/2;Ta;/\nmv[^\n]*$/i\new stuff' -e 'P;D' file

在文件的整个长度上打开一个由3行组成的运行窗口,当当前行的开头与mv相匹配时,插入文本new stuff,否则打印/删除窗口的第一行,然后重复。