Conteúdo do arquivo Grep EXCEPT caso de correspondência com contexto

0

Eu tenho um arquivo test.txt, com conteúdos como estes:

line random text 1
line random text 2
line random text 3
line particular exception 
line except detail 1
line except detail 2
line except detail 3
....
line random text 14
line random text 15
line random text 16
line particular exception 
line except detail 1
line except detail 2
line except detail 3
.....

Eu quero produzir (para mais grep) a filtragem do conteúdo do arquivo onde "exceção particular" aparece e filtrar os detalhes da "exceção particular" que aparecem APÓS (todas as 3 linhas).

O comando lógico em que pensei é o seguinte:

cat test.txt | grep -v -A 3 "particular exception"

Mas não funciona como eu esperava.

Qual é a maneira correta de fazer isso?

Para algum contexto, o que estou tentando fazer é encontrar exceções em um arquivo de log, EXCETO um em particular que está constantemente se repetindo, então primeiro eu quero limpá-lo.

    
por ndelucca 06.04.2018 / 15:00

2 respostas

3

Em vez de usar grep , você pode usar o GNU sed :

sed -e '/particular exception/,+3d' test.txt

Isso encontra linhas que correspondem a particular exception e as exclui e as três linhas depois delas.

    
por 06.04.2018 / 15:24
0

Usando awk :

$ awk -v n=3 -v p='particular exception' 'match($0,p) { skip=n+1 } --skip < 0' test.txt
line random text 1
line random text 2
line random text 3
....
line random text 14
line random text 15
line random text 16
.....

O número de linhas de contexto à direita para ignorar é dado na linha de comando com, e. -v n=3 e a expressão regular para correspondência também são dadas na linha de comando como -v p='expression' .

A variável skip será reduzida em um para cada linha lida e o script imprimirá a linha atual sempre que a variável skip for menor que zero. Quando o padrão de interesse é encontrado, a variável skip obtém o valor de n + 1 , o que significa que a linha atual e as linhas n a mais serão ignoradas.

match($0,p) também pode ser escrito $0 ~ p .

    
por 06.04.2018 / 16:25

Tags