grep
옵션을 사용하여 grep -v
결과를 필터링하고 싶습니다 . 하지만 특정 모드를 사용하면 출력에는 차이가 없습니다. log.log의 내용:
ERROR
error
EXCEPTION
exception
<STATUS>ERROR</STATUS>
<MessageType>ERROR</MessageType>
명령을 실행할 때:
egrep -wi 'error|exception' /temp/log.log | grep -v 'error'
출력은 다음과 같습니다.
ERROR
EXCEPTION
exception
<STATUS>ERROR</STATUS>
<MessageType>ERROR</MessageType>
하지만 다음 명령을 실행하면:
egrep -wi 'error|exception' /temp/log.log | grep -vi '<STATUS>ERROR</STATUS>'
여전히 출력이 제공됩니다.
ERROR
EXCEPTION
exception
<STATUS>ERROR</STATUS>
<MessageType>ERROR</MessageType>
그리고 내가 찾고 있는 것은:
ERROR
EXCEPTION
exception
<MessageType>ERROR</MessageType>
왜 이런 일이 발생합니까?
답변1
egrep -w 'error|exception'
이 명령은 grep 결과에서 이러한 패턴을 강조하기 위해 패턴 앞뒤에 특수 문자(예: 오류 또는 예외)를 추가하기 때문에 문제가 발생합니다 .
Harald가 말했듯이. grep 출력의 STATUS 태그 사이에 있는 "ERROR"에는 flags에 의해 추가된 특수 문자가 있기 때문에 "ERROR" 패턴은 grep 출력 문과 일치하지 않습니다 -w
.
따라서 egrep
결과가 grep -v
명령으로 전송되면 패턴과 일치하지 않습니다.