特定のパターンが一致した後、特定の行数を削除したいと思います。
誰でもこのコマンドを使ってこれを行う方法を教えてくださいsed
。
ベストアンサー1
sed -ne '/pattern/{n;n;n;n;d;}' -e p
一致する行が削除されます。模様その後は4行が出ます。
パターン自体に一致する行を削除したくない場合は、次のようにします。
sed -ne '/pattern/{p;n;n;n;n;d;}' -e p
説明: 現在行が一致する場合模様、[p]はそれを印刷して[n]extを取得し、[n]extと[n]extをインポートし、[n]extと[d]はそれを破棄します。 [d]iscardのため、この場合[p]rintコマンドは実行されません。それは他のすべての行を実行します。-n
自動印刷を無効にすると(これはほとんどすべてが印刷されます)、-e p
結果行を印刷できるようにすることを意味します。
例:
$ seq 8 | sed -ne '/2/{p;n;n;n;n;d;}' -e p
1
2
7
8
行数を数字で指定するには、以下を使用する方が簡単ですawk
。
awk 'n>0 {n--;next}; /pattern/{n=4}; 1'
(これらの解決策はすべてスキップされた行でパターンを見つけません。)