この 2 日間、次のsed
質問に頭を悩ませていました。
次のファイル(iptables)があります:
someline
someline
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
someline
sed
パターンの検索に使用し*filter
、一致した場合は 2 番目のパターンを検索し、2 番目のパターン[0:0]
が最後に出現した後に行を追加します。
これにより、(理想的には)次のようになります。
someline
someline
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
TESTLINEADDEDBYSED
someline
ここのフォーラムは良いスタートを切ってくれましたが、この特定の問題を解決することはできません。
私はこれまでのところ次の解決策を持っていますが、2番目のパターンが最初に出現した後に行を追加します[0:0]
:
sed -n '/\*filter/{:a;N;/^\n/s/^\n//;/\[0:0\]/{!ba;p;s/.*/TESTLINEADDEDBYSED/;};ba}; p' file
私は.*
、2番目のブランチで最初に出現した[0:0]
? ここで私は何を誤解していますか?