パターンを含む行と[重複]の前の行を削除してください。

パターンを含む行と[重複]の前の行を削除してください。

ファイルからパターンを含む2行を削除したいですaaa bbb ccc

パターンを含む行aaa bbb cccとその前の行を削除する次の式を使用しました。

$ sed -n '/aaa bbb ccc/{s/.*//;x;d;};x;p;${x;p;}' file.txt | sed '/^$/d'

これは1つのファイルに対して機能します。複数のファイルでは動作しません

$ for i in *.txt; do sed -n '/aaa bbb ccc/{s/.*//;x;d;};x;p;${x;p;}' "$i" | sed '/^$/d'; done

サンプルファイル:

xxx
yyy
aaa bbb ccc
eee
fff
aaa bbb ccc
ggg
hhh

結果ファイル:

xxx
eee
ggg
hhh

答え1

使っているようですgnu sed。この場合、次のことができます。

sed -s 'N;/PATTERN/!P;D' ./*.txt

それ以外のsed場合は、ファイルのリストを繰り返す必要があります。

for file in ./*.txt
do
sed '$!N;/PATTERN/!P;D' "$file"
done

これはパターンスペースに常に2行を保持し、パターンスペースが一致しない場合は最初の行を印刷するため、入力は次のようになります。

some line
PATTERN
PATTERN
more
lines
another line
PATTERN

それは印刷されます

more
lines

関連情報