Eliminar líneas que contienen el patrón y la línea anterior a

Eliminar líneas que contienen el patrón y la línea anterior a

Me gustaría eliminar dos líneas en un archivo que contiene patrón aaa bbb ccc.

He utilizado la siguiente expresión, que elimina la línea que contiene el patrón aaa bbb cccy la línea anterior.

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

Esto funciona para un archivo. No funciona para varios archivos.

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

archivo de ejemplo:

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

archivo de resultados:

xxx
eee
ggg
hhh

Respuesta1

Parece que estás usando gnu sed- en ese caso puedes hacer algo como

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

Con otros seds tendrías que recorrer la lista de archivos

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

Esto siempre mantendrá dos líneas en el espacio del patrón e imprimirá la primera si el espacio del patrón no coincide con una entrada como

some line
PATTERN
PATTERN
more
lines
another line
PATTERN

se imprimirá

more
lines

información relacionada