Gostaria de excluir duas linhas em um arquivo contendo pattern aaa bbb ccc
.
Usei a seguinte expressão, que exclui a linha que contém o padrão aaa bbb ccc
e a linha anterior.
$ sed -n '/aaa bbb ccc/{s/.*//;x;d;};x;p;${x;p;}' file.txt | sed '/^$/d'
Isso funciona para um arquivo. Não funciona para vários arquivos
$ for i in *.txt; do sed -n '/aaa bbb ccc/{s/.*//;x;d;};x;p;${x;p;}' "$i" | sed '/^$/d'; done
arquivo de exemplo:
xxx
yyy
aaa bbb ccc
eee
fff
aaa bbb ccc
ggg
hhh
arquivo de resultado:
xxx
eee
ggg
hhh
Responder1
Parece que você está usando gnu sed
- nesse caso você pode fazer algo como
sed -s 'N;/PATTERN/!P;D' ./*.txt
Com outros sed
programas você teria que percorrer a lista de arquivos
for file in ./*.txt
do
sed '$!N;/PATTERN/!P;D' "$file"
done
Isso sempre manterá duas linhas no espaço do padrão e imprimirá a primeira se o espaço do padrão não corresponder a uma entrada como
some line
PATTERN
PATTERN
more
lines
another line
PATTERN
ele irá imprimir
more
lines