Como 'grep -v' e também excluir 'n' linhas após a partida? [duplicado]

1 resposta

1

Usando o GNU sed :

$ sed '/AA/,+2d' <file
SomeTestABCD
String
EndTest
SomeTestDEFG
String
EndTest
SomeTestACDF
String
EndTest

O script GNU sed localiza linhas que contêm a string AA e, em seguida, exclui essa linha e as duas linhas seguintes da entrada. O endereçamento relativo +2 é uma extensão sed do GNU para o padrão sed .

Usando o padrão sed , excluindo duas linhas:

sed -n '/AA/{n;n;d;}; p' <file

Isso usa sed sem gerar implicitamente todas as linhas de entrada (com -n ). Quando o padrão AA é correspondido, as próximas duas linhas são explicitamente lidas e excluídas. Todas as linhas que não acionam o padrão serão impressas.

Com o padrão sed , excluindo a linha EndTest :

sed '/AA/,/^EndTest$/d' <file

Isso exclui todas as linhas das linhas que contêm a string AA para a linha imediatamente seguinte que corresponde ao padrão ^EndTest$ .

Usando awk para ignorar duas linhas depois de corresponder a AA :

awk '/AA/ { getline; getline; next } 1' <file

Usando awk da mesma forma que a última sed variação:

awk '/AA/,/^EndTest$/ { next } 1' <file
    
por 01.10.2018 / 08:46