grep -v 필터가 작동하지 않습니다.

grep -v 필터가 작동하지 않습니다.

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명령으로 전송되면 패턴과 일치하지 않습니다.

관련 정보