在匹配模式之间添加一行-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。
打印第一行并删除整个。