Bash 在特定图案的下方或上方插入一条线

Bash 在特定图案的下方或上方插入一条线,bash,awk,sed,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' 这些都不管用。感谢您在advanced中的帮助这可能对您有用(GNU sed): $ awk 'NR==FNR{if (/mv/) tgt=NR-2; next}

我有以下案文:

bar


eor
mv foo bar
我想在mv上方插入一行2或3行,因为eor沿着文件重复,我只需要添加一行

我试过这个:

sed -i '/mv/2i \this' file
我尝试了一些awk变体,如:

awk '/mv/ { print; print "new line"; previous }2'
这些都不管用。感谢您在advanced中的帮助

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

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

new stuff

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

这可能适用于您(GNU-sed):


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

mv行只出现一次吗?mv行只出现一次吗?
sed -e ':a;N;s/\n/&/2;Ta;/\nmv[^\n]*$/i\new stuff' -e 'P;D' file