Sed:最初のn行の間に与えられた文字列を含む行を削除します。

Sed:最初のn行の間に与えられた文字列を含む行を削除します。

私は文字列とファイルを受け取りました。最初の30行の間に指定された文字列を含む行を削除する必要があります。次のようなことを試しました。sed -i '/pattern/1,30d' filename しかし、エラーが発生します。具体的には、私が望むのは、sedが最初の30行だけを分析し、与えられたパターンが見つかったらその行を削除することです。

答え1

少なくともGNU sedを使うと可能です。

sed '1,30{/pattern/d}' file

縮小テスト:次fileのように提供されます。

some line
pattern
other line
some line
pattern
other line

それから

$ sed '1,3{/pattern/d}' file
some line
other line
some line
pattern
other line

答え2

sed以下でhead使用できますtail

( head -n30 file | sed '/pattern/d' ; tail -n+31 file ) > newfile

またはPerlを使用して:

perl -i~ -ne 'print if $. > 30 or not /pattern/' file

関連情報