다음 명령을 실행하는 가장 좋은 방법이 있는지 궁금합니다.
cat cisco.log-20151103.log | grep -v "90.192.142.138" | grep -v "PIX" | grep -v "Intrusion"
시도했습니다
cat cisco.log-20151103.log | grep -v "90.192.142.138|PIX|Intrusion"
작동하지 않습니다.
답변
h2>
다른 두 가지 옵션
grep -v -e 90.192.142.138 -e PIX -e Intrusion cisco.log-20151103.log
및 고정 문자열 가정
grep -vF "90.192.142.138 PIX Intrusion " cisco.log-20151103.log
Answer
grep은 반드시 파이프의 입력이 필요하지 않으므로 수행 할 수 있습니다.
grep -vE "90\.192\.142\.138|PIX|Intrusion" cisco.log-20151103.log
대문자 E는 정규식 모드를 사용하며이 경우 점은 이스케이프해야합니다.
댓글
답변
grep -vE "90.192.142.138|PIX|Intrusion" cisco.log-20151103.log
댓글
-
.
이후 이것은 또한 일치하는 모든 문자와 일치합니다.90C192X142R138
OP가 요청한 것이 아닙니다. 특수 (정규식) 문자를 이스케이프해야합니다.
Answer
$ grep -v -f exclude.list $ cat exclude.list 90.192.142.138 PIX Intrusion
댓글
- 잘 작동합니다. ' 누군가 반대표를 던진 이유를 잘 모르겠습니다.
-E
는 확장 정규식 모드를 켜서|
패턴을 대체 할 수 있습니다.grep
는 정규식을 가지며 점은 의미가 있습니다. 점은 질문에서 이스케이프되어야합니다. n,하지만 ' 숫자 시퀀스가 어쨌든 다른 것과 일치 할 가능성은 낮습니다.grep -f
는 정규 표현식을 끕니다.190.192.142.138
와 일치합니다. 따라서 이상적으로는 가능한 경우 IP 주소 부분을 고정하거나 쉼표 ", " :grep -vE ',90\.192\.142\.138,|PIX|Intrusion' cisco.log-20151103.log