다음이 있다고 가정합니다 file.txt
.
---------
foo bar
more foo bar
---------
실행할 때 grep -P '(?<=-$)(?s:.)*(?=^-)' file.txt
중간 두 줄만 일치 할 것으로 예상하지만이 표현식은 일치하지 않습니다. 뭐가 문제 야? 나는 또한 시도 grep -P '(?s)(?<=-$).*(?=^-)' file.txt
했지만 동일한 결과.
패턴이 작동하지 않습니다.
P
옵션은 단독으로 만 만들어 grep
PCRE 정규식 엔진을 사용하여 일치grep
일치하는 전체 행 o
을 출력하므로 일치하는 텍스트를 출력 z
하고 파일을 단일 텍스트로 처리하는 옵션을 추가해야 합니다.^
및 $
앵커가 있습니다. 플래그와 함께 플래그 가 필요합니다 ( 줄 바꿈 문자를 포함한 모든 문자와 일치 하게 함 ).m
s
.
따라서 m
및 -oz
다음 과 함께 정규식을 사용할 수 있습니다 .
grep -Poz '(?ms)(?<=-$).*(?=^-)' file.txt
또는,
grep -Poz '(?s)-\R\K.*(?=\R-)' file.txt
여기서 \R
줄 바꿈 시퀀스와 \K
일치하고 전체 메모리 버퍼에서 지금까지 일치하는 텍스트를 생략합니다.
regex 데모를 참조하십시오 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다