Jag undrade om det finns ett bästa sätt att köra följande kommando

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

Jag försökte

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

men det fungerar inte.

Svar

två andra alternativ

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

och förutsätter fasta strängar

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

Svar

grep behöver inte nödvändigtvis mata in från ett rör, så du kan göra

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

Huvudstad E växlar till läge för reguljärt uttryck och i detta fall måste punkter undvikas.

Kommentarer

  • Det borde vara -E slår på Utökat läge för reguljärt uttryck, vilket möjliggör alternering | av mönster. grep utan -E har regelbundna uttryck och prickar är meningsfulla. Prickarna borde ha rymt i questio n, men det ' är osannolikt att nummersekvensen ändå skulle matcha något annat. grep -f inaktiverar reguljära uttryck.
  • Prickarna bör i alla fall undvikas; exemplet som ges (i OP och svar) skulle matcha 190.192.142.138; så helst bör IP-adressstycket förankras om det är möjligt, eller inkludera vilken avgränsare som helst innan IP-adressen i loggen, antag att ett kommatecken ", " för att göra saker tydliga: grep -vE ',90\.192\.142\.138,|PIX|Intrusion' cisco.log-20151103.log

Svar

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

Kommentarer

  • Eftersom . matchar alla karaktärer, det matchar också t.ex. 90C192X142R138 och det är inte vad OP frågade. Du ska undkomma specialtecken (regex).

Svar

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

Kommentarer

  • Det här fungerar bra, jag ' är inte säker på varför någon nedröstade det.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *