pcregrep은 어떻게 작동하나요?

pcregrep은 어떻게 작동하나요?

파일이 있습니다:

This error
-this
-this
-that
[text I want]
This error
-asd
-asfag
-adsfhs
[text I want]
[text I want]
This error
-asdgsda
-asdgg
-gasdg

제외하고 일치시키고 싶습니다 This error and next three lines. 다음을 사용할 수 있습니다.

pcregrep -vM  'This error\n.*\n.*\n' file

출력은 다음과 같습니다.

[text I want]
[text I want]
[text I want]

그러나 동일한 명령을 사용하여 (제거하여) 일치시키려면 v제거하는 대신 다음을 수행하십시오.

pcregrep -M  'This error\n.*\n.*\n' file

출력은 다음과 같습니다.

This error
-this
-this
This error
-asd
-asfag
This error
-asdgsda
-asdgg

pcregrep그렇다면 실제 효과는 무엇인가?

답변1

.*정규식 끝에 추가됩니다 .

pcregrep -M  'This error\n.*\n.*\n.*' file
pcregrep -vM 'This error\n.*\n.*\n.*' file

버그 때문인지는 모르겠지만 -v마지막 경기 이후 라인 전체를 제외하는 것 같기도 합니다만 \n, -v그것 없이는 그렇지 않습니다. 따라서 추가 .*(즉, regex 로 끝나지 않음 \n)하면 두 경우 모두 마지막 줄과 명시적으로 일치하므로 문제/기능이 트리거되지 않습니다.

관련 정보