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
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 exemplo90C192X142R138
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.
-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.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