Zastanawiałem się, czy jest najlepszy sposób na uruchomienie następującego polecenia
cat cisco.log-20151103.log | grep -v "90.192.142.138" | grep -v "PIX" | grep -v "Intrusion"
Próbowałem
cat cisco.log-20151103.log | grep -v "90.192.142.138|PIX|Intrusion"
, ale to nie działa.
Odpowiedź
dwie inne opcje
grep -v -e 90.192.142.138 -e PIX -e Intrusion cisco.log-20151103.log
i zakładając ustalone ciągi znaków
grep -vF "90.192.142.138 PIX Intrusion " cisco.log-20151103.log
Odpowiedź
grep niekoniecznie wymaga wprowadzenia potoku, więc możesz to zrobić
grep -vE "90\.192\.142\.138|PIX|Intrusion" cisco.log-20151103.log
Wielkie E włącza tryb wyrażenia regularnego i w tym przypadku należy zastosować znaki zmiany znaczenia dla kropek.
Komentarze
Odpowiedź
grep -vE "90.192.142.138|PIX|Intrusion" cisco.log-20151103.log
Komentarze
- Od
.
pasuje do dowolnego znaku, to również pasuje np90C192X142R138
i nie o to prosił OP. Unikaj znaków specjalnych (wyrażenia regularnego).
Odpowiedź
$ grep -v -f exclude.list $ cat exclude.list 90.192.142.138 PIX Intrusion
Komentarze
- To działa dobrze, ' nie jestem pewien, dlaczego ktoś go zlekceważył.
-E
włącza Rozszerzony tryb wyrażeń regularnych, który umożliwia naprzemienność|
wzorców.grep
bez -E ma wyrażenia regularne, a kropki mają znaczenie. Kropki powinny zostać zmienione w pytaniu n, ale ' jest mało prawdopodobne, aby sekwencja liczb i tak pasowała do czegokolwiek innego.grep -f
wyłącza wyrażenia regularne.190.192.142.138
; więc najlepiej byłoby, gdyby część adresu IP była zakotwiczona, jeśli to możliwe, lub zawierać dowolny separator znajdujący się przed adresem IP w dzienniku, zakładając, że przecinek ", " żeby wszystko było jasne:grep -vE ',90\.192\.142\.138,|PIX|Intrusion' cisco.log-20151103.log