답변:
grep -E 'fatal|error|critical|failure|warning|' *.log
grep
디렉토리를 건너 뛰지 만 모든 파일을 재귀 적으로 확인 하는 방법은 무엇입니까? grep -E 'text' **/*
작동하지만 각 하위 디렉토리에 대해 오류 메시지를 표시 한 다음 (그 안의 모든 파일을 올바르게 확인)
find . -type f -exec grep -E 'fatal|error|critical|failure|warning' {} +
다음과 같은 것을 사용할 수 있습니다.
find . -name "*.log" | xargs grep -E 'fatal|error|critical|failure|warning|'
.log
확장명을 가진 모든 파일을 찾고 grep
명령을 적용합니다 .
xargs
과에 대한 가능성 파일 이름에 공백에 심각한 파손 그냥 사용할 수 있습니다 find . -name '*.log' -exec grep -E 'fatal|error|critical|failure|warning' {} +
?
더 간단하면 각 파일을 하나씩 지정할 수 있습니다.
grep -E 'fatal|error|critical|failure|warning' file1.log file2.log
하위 디렉토리 파일에서도 재귀 적으로 검색하려면 아래 명령을 사용할 수 있습니다
하위 디렉토리 파일에서도 재귀 적으로 검색합니다.
egrep -r "string1|string2" pathname
이것은 시간이 많이 걸리는 작업이었습니다. 그렇습니다. 동시에 여러 개의 다른 로그에서 여러 개의 문자열을 검색하려면 반드시 스크립트를 작성해야합니다. 그러나 나는 최근에 이것을해야했고 그것은 매우 고통 스럽습니다. 그럼에도 불구하고, 준비가 완료되었으며 다음 링크에서 다운로드 할 수 있습니다.
이것이 작동하는 방식은 매우 간단합니다.
시나리오 1 : 하나의 로그 파일에서 하나의 문자열 모니터링
./logsearch.sh localhost /var/tmp/logXray autonda /var/log/messages 60m 'can.*t.*open' '.' 1 2 single_errCheck -ndshow
시나리오 2 : 하나의 로그 파일에서 여러 문자열 모니터링
./logsearch.sh localhost /var/tmp/logXray autonda /var/log/messages 60m 'can.*t.*open_P_ntpd.*stat' '.' 1 2 multi_errCheck -ndshow
시나리오 3 : 여러 로그 파일에서 단일 / 다중 문자열 모니터링
./logsearch.sh localhost /var/tmp/logXray autonda /var/log 60m 'can.*t.*open_P_ntpd.*stat' '.' 1 2 multi_err_multi_logCheck -ndshow
노트:
_P_는 OR을 의미합니다-파이프 "|"를 대체합니다 "_P_"가 포함 된 문자열을 검색해야 할 가능성이 적기 때문에 symbol입니다. "_P_"를 입력하지 않으려면 _P_를 "|"로 대체하면됩니다.
이 스크립트를 사용할 때 자주 변경하는 매개 변수는 다음과 같습니다.
'-ndfoundmul'을 사용하면 다음과 비슷한 결과가 나타납니다.
[root@dgphxtest001]# ./logsearch.sh localhost /var/tmp/logXray autonda /var/log/messages 60m 'can.*t.*open_P_ntpd.*stat' '.' 1 2 blahblahA -ndfoundmul
OK: [/var/log/messages][1] /var/log/messages:P=(can_t_open=0 ntpd_stat=0)_F=(117s)_R=(228,228=0)
원본 포스터 문제에 대한 해결책 : 여러 로그 파일에서 여러 문자열 스캔
./logsearch.sh localhost /var/tmp/logXray autonda /var/log 60m 'fatal_P_error_P_critical_P_failure_P_warning' '.' 1 2 multierr_logCheck -ndshow
운영체제 : Ubuntu 및 Red Hat에서 테스트되었습니다.
grep -EFn "fatal|error|critical|failure|warning|search-string" /path/to/the/file/log_file?.lo* --color=auto
이것은 검색합니다 '치명적 오류 또는 중요한 실패 또는 경고 또는 검색 문자열' 로 시작하는 이름을 가진 파일의 'LOG_FILE?' / path / to / the / file / 경로 에 확장자 'lo '*를 입력하고 검색 문자열에 임의의 색상과 인쇄 줄 번호를 지정하십시오.
grep
USE 커리어에서 가장 좋은 행운 을 얻을 수있는 다른 질문이있을 것입니다 !
-E
동시에 -F
사용할 수 없으면 충돌합니다 (오타?).
JigarGandhi의 답변 은 별표 와일드 카드 사용을 보여줍니다. 더 많은 것들이 있으며 여기 에서 또는를 실행 하여 볼 수 있습니다man 7 glob
.
내가 찾은 것 중 하나는와 일치하는 범위입니다 []
. 내가 작업하는 시스템은 순차적으로 번호가 매겨진 로그 파일 (예 :)을 생성하기 때문에 product.log.1
product.log.2
...
product.log.200
3 개 또는 4 개의 순차 파일에서 단일 명령으로 grep하는 것이 편리하지만 그 이상은 아닙니다. 그래서 이건
grep 'whatever' product.log.[5-7]
product.log로 끝나는 모든 파일을 grep합니다. 와일드 카드는 끝에있을 필요가 없으므로 플리커 플라이의 대답 을 다음과 같이 단순화 할 수 있습니다.
grep -E 'fatal|error|critical|failure|warning' file[1,2].log
이러한 와일드 카드는 cp
예를 들어 다른 명령에서도 사용될 수 있습니다 .
파일이 모두 같은 폴더 인 경우 중괄호를 사용할 수도 있습니다.
예를 참조하십시오
grep -E 'fatal|error|critical|failure|warning|' /var/log/{messages,secure,syslog,dmesg}
grep에 s를 추가하면 누락 된 파일에 대한 오류가 발생합니다.
grep -sE 'fatal|error|critical|failure|warning|' /var/log/{messages,secure,syslog,dmesg}
OS 차이로 인해 하나의 파일과 다른 파일에있는 여러 배포판에서 작동하는 명령을 수행하기 위해 직접 실험했습니다.
메일 로그
sudo grep -is bob@example.com /var/log/{maillog,exim_mainlog,exim_rejectlog,mail.log,mail.err,syslog}
2> / dev / null을 사용하여 zgrep에서 .gz 경고 누락을 억제하는 보관 된 메일 로그
sudo zgrep -is bob@example.com /var/log/{maillog*,exim_mainlog*,exim_rejectlog*,mail.log*,mail.err*,syslog*} 2>/dev/null
grep
하나 이상의 파일 인수를 취할 수 있습니다.