ファイルからパターンを含む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