표준 로그 형식을 사용하는 많은 Apache 로그가 있습니다. 웹 크롤러에서 제공되지 않은 모든 로그 라인을 가져오고 싶습니다.
그래서 다음과 같은 항목이있는 robot_patterns 파일이 있다고 가정 해 봅시다.
Googlebot
msnbot-media
YandexBot
bingbot
명령을 실행 grep -f robot_patterns *.log
하면 위 패턴과 일치하는 봇으로 모든 항목을 가져옵니다. 내 실제 목록에는 ~ 30 개의 봇 및 에이전트 항목이 있습니다.
그러나 봇 이 아닌 모든 항목을 찾고 싶습니다 . 그래서 나는 시도 grep -v -f robot_patterns *.log
하고 grep에 의해 결과가 반환되지 않습니다. 이것은 내가 기대하거나 원하는 것이 아니며, 내가 원하는 것을 얻는 확실한 방법을 찾지 못했습니다. -v
파일에서 여러 패턴과 결합 된 옵션을 사용하는 경우 grep은 모든 패턴과 일치하는 경우에만 일치하는 줄을 반환합니다.
시스템 에서이 작업을 시도했을 때 grep -v -f는 원하는 동작을 보였으며 패턴과 일치하지 않는 행만 반환했습니다. 이것은 (GNU grep) 2.14.56-1e3d와 함께였습니다. 어떤 grep을 사용하고 있습니까?
—
wingedsubmariner
나는 달리고있다
—
Zoredache
GNU grep 2.6.3
.
좀 더 테스트를 해본 결과, 패턴 파일에 빈 줄이 있으면 모든 줄과 일치하여 -v로 줄을 반환하지 않습니다. 그러나 이것은 -F의 문제가 아니며 -F는 작업의 grep 속도를 높일 수 있습니다-시도해 볼 가치가 있습니다.
—
wingedsubmariner
후행 빈 줄! 아아 ... 그게 문제인 것 같습니다. 원하는 경우 답변으로 추가해야합니다.
—
Zoredache