Удалить строки, содержащие шаблон и строку до

Я хотел бы удалить две строки в файле, содержащие шаблон aaa bbb ccc .

Я использовал следующее выражение, которое удаляет строку, содержащую шаблон aaa bbb ccc и строку before.

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

Это работает для одного файла. Он не работает для нескольких файлов

 $ 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 

Похоже, вы используете gnu sed – в этом случае вы можете сделать что-то вроде

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

С другими sed вам придется перебирать список файлов

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

Это всегда будет содержать две строки в пространстве шаблонов и печатать первый, если пространство шаблонов не совпадает с таким входом, как

 some line PATTERN PATTERN more lines another line PATTERN 

он распечатает

 more lines