파일 경로 이름 및 grep 값을 텍스트 파일로 제외

파일 경로 이름 및 grep 값을 텍스트 파일로 제외

내 웹서버에서 "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

관련 정보