Mi chiedevo se esiste un modo migliore per eseguire il seguente comando
cat cisco.log-20151103.log | grep -v "90.192.142.138" | grep -v "PIX" | grep -v "Intrusion"
Ho provato
cat cisco.log-20151103.log | grep -v "90.192.142.138|PIX|Intrusion"
ma non funziona.
Risposta
altre due opzioni
grep -v -e 90.192.142.138 -e PIX -e Intrusion cisco.log-20151103.log
e assumendo stringhe fisse
grep -vF "90.192.142.138 PIX Intrusion " cisco.log-20151103.log
Risposta
grep non necessita necessariamente di input da una pipe, quindi potresti farlo
grep -vE "90\.192\.142\.138|PIX|Intrusion" cisco.log-20151103.log
La E maiuscola attiva la modalità espressione regolare e in questo caso i punti devono essere preceduti da caratteri di escape.
Commenti
Answer
grep -vE "90.192.142.138|PIX|Intrusion" cisco.log-20151103.log
Commenti
- Poiché
.
corrisponde a qualsiasi carattere che corrisponda anche ad es90C192X142R138
e questo non è ciò che lOP ha chiesto. Devi eseguire lescape dei caratteri speciali (regex).
Risposta
$ grep -v -f exclude.list $ cat exclude.list 90.192.142.138 PIX Intrusion
Commenti
- Funziona benissimo, ' non sono sicuro del motivo per cui qualcuno lo ha votato in modo negativo.
-E
che attiva la modalità di espressione regolare Estesa , che consente lalternanza|
di pattern.grep
senza -E contiene espressioni regolari e i punti hanno un significato. I punti avrebbero dovuto essere scappati nella questio n, ma ' è improbabile che la sequenza di numeri corrisponda comunque a qualsiasi altra cosa.grep -f
disattiva le espressioni regolari.190.192.142.138
; quindi idealmente la parte dellindirizzo IP dovrebbe essere ancorata, se possibile, o includere qualsiasi delimitatore prima dellindirizzo IP nel registro, supponendo una virgola ", " per chiarire le cose:grep -vE ',90\.192\.142\.138,|PIX|Intrusion' cisco.log-20151103.log