두 패턴 사이의 모든 정규식 일치 항목을 가져와 파일로 인쇄합니다.

두 패턴 사이의 모든 정규식 일치 항목을 가져와 파일로 인쇄합니다.

긴 줄이 많이 포함된 파일이 있습니다. 두 패턴 사이의 모든 그룹을 가져와 한 줄에 하나씩 새 파일로 인쇄하고 싶습니다. Python을 사용하여 이 작업을 수행할 수 있지만 명령줄 도구만 사용하여 수행하는 것을 선호합니다. 종료 모드가 없으면 줄 끝까지 다 잡고 싶습니다.

그것은 다음과 같습니다:

input: 
xxSTART relevanttext xxEND something else xxSTART even more relevant

output:
relevanttext
even more relevant

답변1

GNU grep이 옵션인 경우 -P(perl 호환 정규식) 플래그를 전달하고 정방향 어설션, 역방향 어설션 및 비탐욕적 일치를 사용하여 필요한 것을 추출할 수 있습니다.

echo 'xxSTART relevanttext xxEND something else xxSTART even more relevant'  |\
grep -oP '(?<=START).*?(?=xxEND|$)'
relevanttext
even more relevant

또는 Stephane Chazelas가 제안한 것처럼 장난스러운\케이뒤돌아보기 주장 대신

echo 'xxSTART relevanttext xxEND something else xxSTART even more relevant'  |\
grep -oP 'START\K.*?(?=xxEND|$)' 

관련 정보