2017-08-02 9 views
0

sedを使用して特定のコードブロックを検索し、その後ろの特定の行だけを削除することはできますか?例えばsedを使ってマッチを削除できますか?

、私はこのようなブロックを持っており、それの後に特殊なマーカー1および2行目のみを削除する場合:

special marker 1 
text 1 
text 2 
text 3 

が、私はブロックのインスタンスを検索して来るようにsedを使用することができますアウト:しかし、このコマンドは上の

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

text 1 
text 3 

私のようなコマンドを認識してい私を残して:

text 1 

これは、次の行の操作と削除を倍増するようです。このコマンドを修正する方法はありますか?これは別の方法ですか?あなたがこれを行うことができawkを使用

答えて

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

おかげで、これは私が考えていたものに最も近いと思われます。 – FenrisWolf

0

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

は2行をスキップする印刷するsed教える:

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

あなたは2つのだけのライン出力をしたい場合は、コマンドは

に置き換えることができます
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 
関連する問題