2010-07-02 3 views
1

이것은 grep 및 정규 표현식에 대한 질문입니다.Linux 용 정규 표현식 - Apache HTTPD 액세스 로그에서 200 이외의 모든 응답 코드를 검색하십시오.

나는 그 응답 200 코드 모든 요청을보고 싶다면, 내가 할 수있는 :

grep -e '^.* - - .* .* .* .* .* 200' access_log 

아주 쉬워요합니다.

하지만 응답이 200 코드가 아닌 요청을 모두 검색하려면 어떻게해야합니까? 나는 오직 하나의 grep 명령으로 그렇게 할 수 있기를 바란다. 그게 가능하니?

덕분에, 댄

+0

그. 그것은 역 추적의 끝으로 이어질 것이며 격렬하게 비효율적이어야합니다. –

답변

2

당신은 단순히 grep-v 옵션을 사용할 수 있습니다. 이렇게하면 패턴이 일치하는 이 아닌 모든 행을 반환하므로이 일치하지 않습니다. 이 같은

그래서 :

grep -v [pattern] [file] 
1

내가 이것을 사용하십시오 : 다니엘 Egeberg이 제안

^\S+\s+\S+\s+\S+\s+\[[^]]+\]\s+"(?:GET|POST|HEAD) [^ ?"]+\??[^ ?"]+? HTTP/[0-9.]+"\s+200 

한 후이 결과를 반전. 의견과 캡처 그룹, RegexBuddy의 호의와

는 : 꽤 끔찍한 정규식의

^((?#client IP or domain name)\S+)\s+((?#basic authentication)\S+\s+\S+)\s+\[((?#date and time)[^]]+)\]\s+"(?:GET|POST|HEAD) ((?#file)[^ ?"]+)\??((?#parameters)[^ ?"]+)? HTTP/[0-9.]+"\s+(?#status code)200