說我們得到了一個示例文件:awk的排除範圍模式,但包括啓動模式
11
12
ss
dd
gg
32
ss
dd
gg
所以我想刪除它滿足模式SS GG塊,但我想保持啓動模式SS
的出放應
11
12
ss
32
ss
使用此代碼
awk '/ss/,/gg/{next}1' file
它也不包括開始模式ss
。我們怎麼能保留它?
說我們得到了一個示例文件:awk的排除範圍模式,但包括啓動模式
11
12
ss
dd
gg
32
ss
dd
gg
所以我想刪除它滿足模式SS GG塊,但我想保持啓動模式SS
的出放應
11
12
ss
32
ss
使用此代碼
awk '/ss/,/gg/{next}1' file
它也不包括開始模式ss
。我們怎麼能保留它?
我會用一個打印標誌是這樣的:
$ awk '!flag; /ss/ {flag=1} /gg/ {flag=0}' file
11
12
ss
32
ss
此使用類似的邏輯How to select lines between two marker patterns which may occur multiple times with awk/sed,在某種程度上,使要打印的開始圖案移動所述標記。
!flag
由於變量的默認值爲0
,否定它使其成立。這樣,我們有一個默認True值,這會觸發awk
的默認操作:print $0
。/ss/ {flag=1}
設置flag
發現文本ss
。/gg/ {flag=0}
當發現文本gg
時,取消設置flag
。使用sed
你可以這樣做:
sed '/ss/,/gg/{/ss/!d;}' file
11
12
ss
32
ss
這sed
將刪除模式ss
到gg
除非線是ss
使用!d
命令行。
這很酷,做得很好! – fedorqui