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

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

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

다음과 같은 것 :

input: 
xxSTART relevanttext xxEND something else xxSTART even more relevant

output:
relevanttext
even more relevant

답변1

GNU grep이 옵션인 경우 -P(perl 호환 정규식) 플래그를 전달하고 Lookahead 어설션, Lookbehind 어설션 및 non-greedy match를 사용하여 필요한 것을 가져올 수 있습니다.

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|$)' 

관련 정보