2017-08-02 80 views
0

是否有可能使用sed來搜索特定的代碼塊並刪除匹配,並且只有特定的行後?你可以使用sed刪除匹配,只有某些行後?

舉例來說,如果我有這樣的塊,並希望之後刪除特殊標記1,只有第二行:

special marker 1 
text 1 
text 2 
text 3 

我可以用sed來搜索塊的實例,來出有:

text 1 
text 3 

我知道像命令:

sed -i '/START/,/END/ {/special marker 1/{n;n;N;d;}}' filename; 

但是,此命令上ly離開我:

text 1 

因此,它似乎加倍下一行操作和刪除。任何方式來解決這個命令或以另一種方式做這個?

回答

0
sed -i '/START/,/END/ {/special marker 1/{N;N;D};P;d}' filename 
+0

謝謝,這似乎是最接近我在想什麼。 – FenrisWolf

0

使用awk你可以這樣做:

awk '/special marker 1/{p=NR; next} p && NR==p+2{p=0; next} 1' file 
text 1 
text 3 
2

告訴sed打印跳過2線:

sed -ni '/special marker 1/{n;p;n;n};p' filename 

當你只需要兩行輸出,該命令可以通過

取代
sed -ni '/special marker 1/{n;p;n;n;p}' filename 
0

嘗試遵循awk解決方案一次。

解決方案1:

awk '/special marker 1/{;if(getline var){print var;if(getline var1){next};next}} 1' Input_file 

解決第二:

awk '/special marker 1/{getline;if(NF){print};if(NF){;getline};next} 1' Input_file 
相關問題