Grep -v filter não está funcionando

0

Eu quero filtrar grep dos resultados usando a opção grep -v . Mas a saída não difere ao usar um padrão específico. conteúdo de log.log:

ERROR
error
EXCEPTION
exception
<STATUS>ERROR</STATUS>
<MessageType>ERROR</MessageType>

Quando eu executo o comando:

egrep -wi 'error|exception' /temp/log.log | grep -v 'error'

dá saída:

ERROR
EXCEPTION
exception
<STATUS>ERROR</STATUS>
<MessageType>ERROR</MessageType>

Mas se eu executar o comando:

egrep -wi 'error|exception' /temp/log.log | grep -vi '<STATUS>ERROR</STATUS>'

Ainda dá a saída como:

ERROR
EXCEPTION
exception
<STATUS>ERROR</STATUS>
<MessageType>ERROR</MessageType>

Considerando que estou esperando:

ERROR
EXCEPTION
exception
<MessageType>ERROR</MessageType>

Por que isso está acontecendo?

    
por AB DC 29.10.2015 / 11:07

1 resposta

0

O problema ocorre devido ao egrep -w 'error|exception' . Este comando adiciona caracteres especiais antes e depois do padrão (por exemplo, erro ou exceção) para destacar esses padrões no resultado do grep.

É como Harald mencionou. O padrão 'ERROR' não coincidia com a declaração de saída do grep, pois o 'ERROR' entre as tags STATUS na saída do grep tinha alguns caracteres especiais adicionados a ele pelo -w flag.

Por isso, quando o resultado de egrep foi enviado para o comando grep -v , ele não conseguiu corresponder ao padrão.

    
por 30.10.2015 / 06:12