
긴 줄이 많은 파일이 있습니다. 두 패턴 사이의 모든 그룹을 가져와 한 줄에 하나씩 새 파일로 인쇄하고 싶습니다. 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|$)'