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