grep
syslog 파일을 확인 하기 위해 정규식 패턴 목록을 전달하고 있습니다. 이들은 일반적으로 IP 주소 및 로그 항목과 일치합니다.
grep "1\.2\.3\.4.*Has exploded" syslog.log
"1\.2\.3\.4.*Has exploded"
루프에서 전달 하는 부분 과 같은 패턴 목록 이므로 "-v"를 전달할 수 없습니다.
위의 역을 수행하려고 혼란 스럽습니다. 특정 IP 주소와 오류가있는 NOT match line은 "! 1.2.3.4. * 폭발했습니다"는 1.2.3.4 이외의 다른 시스템에 대해 syslog 줄과 일치합니다. . 내가 있어야 일치하지에 IP를 포함 할 수 있습니다.
StackOverflor에서 다양한 유사한 게시물을 보았지만 사용할 수없는 정규식 패턴을 사용 grep
합니다. 누구나 실례를 제공 할 수 있습니까 grep
?
업데이트 : 이것은 이런 스크립트에서 발생합니다.
patterns[1]="1\.2\.3\.4.*Has exploded"
patterns[2]="5\.6\.7\.8.*Has died"
patterns[3]="\!9\.10\.11\.12.*Has exploded"
for i in {1..3}
do
grep "${patterns[$i]}" logfile.log
done
당신은 의미합니까 때때로 패턴과 일치하기를 원하지만 다른 시간이 모든 것을 일치시킬 제외하고 특정 패턴? (이것은 이상한 요구 사항처럼 보이지만 무엇이든). 이 경우, 두 개의 서로 다른 패턴 목록을 반복하지 않겠습니까?
—
beerbajay
글쎄, 나는 정규식에 대해 잘 모른다. 모든 로깅 장치에 대해이 사실을 알고 싶지 않기 때문에 "폭발 했음"에 대해 grep하고 싶지 않습니다. 따라서 어떻게 든 "Has Exploded"및! 9.10.11.12에 대해 grep 할 수 있습니까?
—
jwbensley
Neil이 제안한 것처럼 한 진술에서 절대적으로 해야하는 경우 부정적인 전망이 있습니다. 내 의견을 참조하십시오.
—
beerbajay
@Neil의 답변에 따라 PCRE 스타일 정규 표현식 일치 및 부정적인 예측 어설 션을 사용하십시오 .PCRE의
—
Codex24
patterns[3]="\!9\.10\.11\.12.*Has exploded"
변경 patterns[3]="(?<!9\.10\.11\.12).*Has exploded"
및 grep "${patterns[$i]}" logfile.log
변경 grep -P "${patterns[$i]}" logfile.log
은 기본적으로 더 많은 메타 문자를 가정하므로 일부 이스케이프는 다른 일치하는 표현식에서 제거해야 할 수도 있습니다.