【发布时间】:2013-02-28 10:43:07
【问题描述】:
在过去的 2 天里,以下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] 的第一次出现?
我在这里误会了什么?
【问题讨论】: