다중 패턴 제외 어 일치 로그 형식을 사용하는 많은 Apache

표준 로그 형식을 사용하는 많은 Apache 로그가 있습니다. 웹 크롤러에서 제공되지 않은 모든 로그 라인을 가져오고 싶습니다.

그래서 다음과 같은 항목이있는 robot_patterns 파일이 있다고 가정 해 봅시다.

Googlebot
msnbot-media
YandexBot
bingbot

명령을 실행 grep -f robot_patterns *.log하면 위 패턴과 일치하는 봇으로 모든 항목을 가져옵니다. 내 실제 목록에는 ~ 30 개의 봇 및 에이전트 항목이 있습니다.

그러나 아닌 모든 항목을 찾고 싶습니다 . 그래서 나는 시도 grep -v -f robot_patterns *.log하고 grep에 의해 결과가 반환되지 않습니다. 이것은 내가 기대하거나 원하는 것이 아니며, 내가 원하는 것을 얻는 확실한 방법을 찾지 못했습니다. -v파일에서 여러 패턴과 결합 된 옵션을 사용하는 경우 grep은 모든 패턴과 일치하는 경우에만 일치하는 줄을 반환합니다.



답변

패턴 파일에 빈 줄이 있으면 모든 줄과 일치하여 줄이 반환되지 않습니다 -v. 행이 정규식으로 해석되고 빈 정규식이 항상 일치하기 때문입니다.

-F그러나 grep와 함께 빈 줄을 무시 하기 때문에 이것은 문제가되지 않습니다 -F.
-F원인은 grep검색 할 단순 문자열로 라인을 해석하고 속도가 빨라질 수 있습니다 grep정규 표현식이 필요하지 않은 경우.


답변

당신은 시도 할 수 있습니다:

grep -vE 'Googlebot|msnbot-media|YandexBot|bingbot' yourlogfile


답변