sedコマンドを使用してファイルからn行を削除する方法は? [コピー]

sedコマンドを使用してファイルからn行を削除する方法は? [コピー]

特定のパターンが一致した後、特定の行数を削除したいと思います。

誰でもこのコマンドを使ってこれを行う方法を教えてください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'

(これらの解決策はすべてスキップされた行でパターンを見つけません。)

おすすめ記事