Zajímalo by mě, jestli existuje nejlepší způsob, jak spustit následující příkaz
cat cisco.log-20151103.log | grep -v "90.192.142.138" | grep -v "PIX" | grep -v "Intrusion"
Zkoušel jsem
cat cisco.log-20151103.log | grep -v "90.192.142.138|PIX|Intrusion"
, ale nefunguje to.
Odpověď
dvě další možnosti
grep -v -e 90.192.142.138 -e PIX -e Intrusion cisco.log-20151103.log
a za předpokladu pevných řetězců
grep -vF "90.192.142.138 PIX Intrusion " cisco.log-20151103.log
Odpověď
grep nemusí nutně potřebovat vstup z kanálu, takže můžete udělat
grep -vE "90\.192\.142\.138|PIX|Intrusion" cisco.log-20151103.log
Velké písmeno E přepne do režimu regulárního výrazu a tečkám je v tomto případě třeba uniknout.
Komentáře
odpověď
grep -vE "90.192.142.138|PIX|Intrusion" cisco.log-20151103.log
Komentáře
- Od
.
odpovídá libovolnému znaku, který také odpovídá, např90C192X142R138
a to není to, co OP požadoval. Měli byste uniknout speciálním znakům (regulárním výrazům).
Odpovědět
$ grep -v -f exclude.list $ cat exclude.list 90.192.142.138 PIX Intrusion
Komentáře
- To funguje dobře, ' si nejsem jistý, proč to někdo odmítl.
-E
zapnuto rozšířený režim regulárního výrazu, který umožňuje střídání|
vzorů.grep
bez -E má regulární výrazy a tečky jsou smysluplné. Tečkám mělo v úkolu uniknout n, ale je ' nepravděpodobné, že by se posloupnost čísel stejně shodovala s čímkoli jiným.grep -f
vypne regulární výrazy.190.192.142.138
; v ideálním případě by tedy měl být kousek adresy IP ukotven, pokud je to možné, nebo do protokolu zahrnout jakýkoli oddělovač před adresou IP, za předpokladu čárky ", " aby bylo vše jasné:grep -vE ',90\.192\.142\.138,|PIX|Intrusion' cisco.log-20151103.log