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 ccc
y 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 sed
s 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