![두 패턴 사이의 모든 정규식 일치 항목을 가져와 파일로 인쇄합니다.](https://rvso.com/image/50567/%EB%91%90%20%ED%8C%A8%ED%84%B4%20%EC%82%AC%EC%9D%B4%EC%9D%98%20%EB%AA%A8%EB%93%A0%20%EC%A0%95%EA%B7%9C%EC%8B%9D%20%EC%9D%BC%EC%B9%98%20%ED%95%AD%EB%AA%A9%EC%9D%84%20%EA%B0%80%EC%A0%B8%EC%99%80%20%ED%8C%8C%EC%9D%BC%EB%A1%9C%20%EC%9D%B8%EC%87%84%ED%95%A9%EB%8B%88%EB%8B%A4..png)
긴 줄이 많은 파일이 있습니다. 두 패턴 사이의 모든 그룹을 가져와 한 줄에 하나씩 새 파일로 인쇄하고 싶습니다. 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|$)'