Ik vroeg me af of er een beste manier is om de volgende opdracht uit te voeren
cat cisco.log-20151103.log | grep -v "90.192.142.138" | grep -v "PIX" | grep -v "Intrusion"
Ik heb het geprobeerd
cat cisco.log-20151103.log | grep -v "90.192.142.138|PIX|Intrusion"
maar het werkt niet.
Antwoord
twee andere opties
grep -v -e 90.192.142.138 -e PIX -e Intrusion cisco.log-20151103.log
en uitgaande van vaste strings
grep -vF "90.192.142.138 PIX Intrusion " cisco.log-20151103.log
Answer
grep heeft niet noodzakelijkerwijs invoer van een pipe nodig, dus je zou kunnen doen
grep -vE "90\.192\.142\.138|PIX|Intrusion" cisco.log-20151103.log
Hoofdletter E schakelt de reguliere expressiemodus in en punten moeten in dit geval worden ontsnapt.
Opmerkingen
Antwoord
grep -vE "90.192.142.138|PIX|Intrusion" cisco.log-20151103.log
Reacties
- Aangezien de
.
komt overeen met elk teken dat ook overeenkomt met bijv90C192X142R138
en dat is niet wat het OP vroeg. U moet speciale (regex) tekens gebruiken.
Antwoord
$ grep -v -f exclude.list $ cat exclude.list 90.192.142.138 PIX Intrusion
Reacties
- Dit werkt prima, ik ' weet niet zeker waarom iemand het downstemde.
-E
moeten zijn, schakelt de Uitgebreide reguliere expressiemodus in, waarmee|
van patronen kan worden afgewisseld.grep
zonder -E heeft reguliere expressies en punten zijn betekenisvol. De punten hadden in de questio moeten zijn ontsnapt n, maar het ' is onwaarschijnlijk dat de reeks getallen hoe dan ook overeenkomt met iets anders.grep -f
schakelt reguliere expressies uit.190.192.142.138
; dus idealiter zou het IP-adresgedeelte indien mogelijk verankerd moeten zijn, of een willekeurig scheidingsteken voor het IP-adres in het logboek moeten opnemen, aangenomen dat een komma ", " om dingen duidelijk te maken:grep -vE ',90\.192\.142\.138,|PIX|Intrusion' cisco.log-20151103.log