grep을 이용하여 특정 값이 아닌 값을 출력하는 방법 알려주세요.

5peaker의 이미지

안녕하세요.

grep을 이용해서 ldap access log를 분석해 출력할려고 합니다.

로그가 아래와 같이 구성되어 있습니다.

아래에서 첫줄의 RESULT err=0 이 아닌 모든 값을 추출해서 출력 할려고 합니다.

어떻게 해야 되는지 부탁 드리겠습니다.

[28/Jul/2006:22:23:03 +0900] conn=3938764 op=1 msgId=2 - RESULT err=0 tag=101 nentries=1 etime=0
[28/Jul/2006:22:23:03 +0900] conn=3938764 op=2 msgId=3 - UNBIND
[28/Jul/2006:22:23:03 +0900] conn=3938764 op=2 msgId=-1 - closing - U1
[28/Jul/2006:22:23:03 +0900] conn=3938764 op=-1 msgId=-1 - closed.
[28/Jul/2006:22:23:05 +0900] conn=3938766 op=-1 msgId=-1 - fd=75 slot=75 LDAP connection from ***.***.***.*** to ***.***.***.***
[28/Jul/2006:22:23:05 +0900] conn=3938766 op=-1 msgId=-1 - closing - B1
[28/Jul/2006:22:23:05 +0900] conn=3938766 op=-1 msgId=-1 - closed.

Prentice의 이미지

grep -v 해보세요.

5peaker의 이미지

제가 질문을 애매하게 했네요.
err=0이 아닌 즉 err=32나 기타등등의 값이 생기면 출력을 할려고 합니다.

요 라인만 하면 되거든요, 위에 다른 라인은 필요가 없습니다.

이럴때 어떻게 해야하나요.

Prentice의 이미지

제가 제대로 이해했는지 모르겠습니다.

cat data | grep "RESULT err" | grep -v "RESULT err=0"

이렇게 하시면 원하시는 내용이 나오나요?

윤봉환의 이미지

grep "RESULT err" data | egrep -v "err=0|err=255"

파이프를 이용하지 않고 grep이 직접 파일을 여는 스타일이 저는 좋아요.
그리고 Tip을 하나 추가하자면,
'egrep' 또는 'grep -e', 'grep -E' 명령을 이용하면 정규펴현식을 쓸 수 있습니다.
위 예문에서는 "or" 의 뜻으로 "|" 을 썼습니다.

放下着-----
내려놓으려는 마음도 내려놓기

放下着-----
내려놓으려는 마음도 내려놓기