以下sed
問題在過去的兩天裏給了我很多頭痛問題。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
我是假設與.*
在第二分支我將消耗下(閱讀:skip?)第一次出現[0:0]
? 我在這裏誤解了什麼?
儘管我的第一個想法只是使用sed,但我必須承認我也喜歡這種簡單而優雅的方法。謝謝! – cybernijntje 2013-02-28 11:19:06
有時候鏈接現有的實用程序可以是一個更簡單的方法,我已經添加了一個兩遍方法,只用'awk'來回答我的對比。 – 2013-02-28 11:37:30