내 웹서버에서 "404" 페이지에 대한 액세스 로그를 수집하고 싶습니다. 다음 명령을 시도했습니다.
grep -irn "404" /var/log/httpd/www.abc.com.access_log > abc-404.txt
이제 동일한 텍스트 파일을 원합니다.ema8ketpl4ace9dmin지정된 경로의 이름입니다. 이는 이러한 경로가 바람직하지 않음을 의미합니다.
--exclude 옵션을 사용해도 소용이 없었습니다.
grep --exclude=ema8ketpl4ace9dmin > abc-404.txt
그냥 빈 텍스트 파일을 제공합니다.
답변1
grep
다음과 같이 두 번째 항목을 포함시켜 볼 수 있습니다 .
grep -irn "404" /var/log/httpd/www.abc.com.access_log|grep -v ema8ketpl4ace9dmin > abc-404.txt
답변2
하나의 파일에만 호출을 적용하기 때문에 왜 해당 옵션을 사용하고 있는지 잘 모르겠습니다 -r
(적어도 첫 번째 예에서는) .grep
두 번째 질문에는 다음을 awk
대신 사용하는 것이 좋습니다 grep
.
awk '$0 ~ /404/ && $0 !~ /ema8ketpl4ace9dmin/ {print}' /var/log/httpd/www.abc.com.access_log > abc-404.txt
awk
이는 "404"라는 표현이 나타나는 모든 줄을 인쇄하도록 지시 하지만,아니요( !~
) 표현 "ema8ketpl4ace9dmin".
"인쇄"는 규칙이 적용되는 모든 줄에 대한 표준 작업이므로 실제로는 생략하고 간단히 말할 수 있습니다.
awk '$0 ~ /404/ && $0 !~ /ema8ketpl4ace9dmin/' /var/log/httpd/www.abc.com.access_log > abc-404.txt