Eu queria saber se existe uma melhor maneira de executar o seguinte comando

cat cisco.log-20151103.log | grep -v "90.192.142.138" | grep -v "PIX" | grep -v "Intrusion" 

Eu tentei

cat cisco.log-20151103.log | grep -v "90.192.142.138|PIX|Intrusion" 

mas não funcionou.

Resposta

duas outras opções

grep -v -e 90.192.142.138 -e PIX -e Intrusion cisco.log-20151103.log 

e assumindo strings fixas

grep -vF "90.192.142.138 PIX Intrusion " cisco.log-20151103.log 

Resposta

O grep não precisa necessariamente da entrada de um pipe, então você pode fazer

grep -vE "90\.192\.142\.138|PIX|Intrusion" cisco.log-20151103.log 

E maiúsculo alterna o modo de expressão regular e os pontos precisam ser escapados neste caso.

Comentários

  • Isso deve ser -E ativa o modo de expressão regular Estendido , que permite a alternância | de padrões. grep sem -E tem expressões regulares e os pontos são significativos. Os pontos deveriam ter escapado na questio n, mas ' é improvável que a sequência de números corresponda a qualquer outra coisa. grep -f desativa as expressões regulares.
  • Os pontos devem ter escape em qualquer caso; o exemplo dado (em OP e resposta) corresponderia a 190.192.142.138; então, idealmente, a parte do endereço IP deve ser ancorada, se possível, ou incluir qualquer delimitador antes do endereço IP no log, supondo uma vírgula ", " para deixar as coisas claras: grep -vE ',90\.192\.142\.138,|PIX|Intrusion' cisco.log-20151103.log

Resposta

grep -vE "90.192.142.138|PIX|Intrusion" cisco.log-20151103.log

Comentários

  • Desde o . corresponde a qualquer caractere isto também corresponde, por exemplo 90C192X142R138 e não foi isso que o OP pediu. Você deve evitar caracteres especiais (regex).

Resposta

$ grep -v -f exclude.list $ cat exclude.list 90.192.142.138 PIX Intrusion 

Comentários

  • Funciona bem, eu ' não tenho certeza de por que alguém votou contra ele.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *