在匹配模式之间添加一行-unix

我想在“模块 xyz”中的 madguy-xyz- 行下方插入“123”。有多个模块具有相似的线条。但我只想将它添加到“模块 xyz”中。

module abc 
    njkenjkfvsfd
    madguy-xyz-mafdvnskjfvn
    enfvjkesn
endmodule

module xyz
    njkenjkfvsfd
    madguy-xyz-mafdvnskjfvn
    enfvjkesn
endmodule

这是我试过但不起作用的代码

sed -i "/module xyz/,/^endmodule/{/madguy-xyz-/a 123}" <file_name>

这是我得到的错误:sed: -e expression #1, char 0: unmatched `{'

回答

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

sed '/module xyz/{:a;n;/madguy-xyz-/!ba;p;s/S.*/123/}' file

对于包含 的行module xyz,继续打印行,直到包含madguy-xyz-

也打印此行,然后将其替换为123.

另一种替代解决方案:

sed '/module/h;G;/madguy-xyz.*nmodule xyz/{P;s/S.*/123/};P;d' file

将任何模块行存储在保持空间中。

将模块行附加到每一行。

如果第一行包含madguy-xyz-第二行module xyz,则打印第一行然后用第二行替换123

打印第一行并删除整个。


以上是在匹配模式之间添加一行-unix的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>