development

문자열을 포함하지 않는 그렙 정규식

big-blog 2020. 6. 5. 08:05
반응형

문자열을 포함하지 않는 그렙 정규식


grepsyslog 파일을 확인 하기 위해 정규식 패턴 목록을 전달하고 있습니다. 이들은 일반적으로 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

grep일치, grep -v반대를 수행합니다. "A와 일치하지만 B와 일치하지 않아야"하는 경우 일반적으로 파이프를 사용합니다.

grep "${PATT}" file | grep -v "${NOTPATT}"

(?<!1\.2\.3\.4).*Has exploded

부정적인 lookbehind (Perl regular expression)를 가지려면 -P로 이것을 실행해야하므로 명령은 다음과 같습니다.

grep -P '(?<!1\.2\.3\.4).*Has exploded' test.log

이 시도. 앞에 선행하는 행을 무시하려면 음수 비하인드를 사용합니다 1.2.3.4. 희망이 도움이됩니다!


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

와 동일해야합니다

egrep "(1\.2\.3\.4.*Has exploded|5\.6\.7\.8.*Has died)" logfile.log | egrep -v "9\.10\.11\.12.*Has exploded"    

참고 URL : https://stackoverflow.com/questions/10411616/grep-regex-not-tain-string

반응형