sed
在过去的两天里,以下问题让我很头疼。
我有以下文件(iptables):
someline
someline
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
someline
我想用来sed
搜索模式*filter
,如果匹配,则搜索第二个模式[0:0]
,然后在第二个模式的最后一次出现之后添加一行。
这将(理想情况下)导致:
someline
someline
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
TESTLINEADDEDBYSED
someline
这里的论坛给了我一个好的开始,但我就是无法破解这个特定的问题。
到目前为止,我有以下解决方案,但它在第一次出现第二个模式之后添加了该行[0:0]
:
sed -n '/\*filter/{:a;N;/^\n/s/^\n//;/\[0:0\]/{!ba;p;s/.*/TESTLINEADDEDBYSED/;};ba}; p' file
我假设.*
在第二个分支中我会消耗(阅读:跳过?)第一次出现[0:0]
?我在这里有什么误解?