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

  • To by mělo být -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.
  • Tečkám by v každém případě mělo uniknout; uvedený příklad (v OP a odpovědi) by odpovídal 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

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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *