패턴이 반복될 때 sed를 사용하여 두 패턴 사이에서 텍스트 선택

패턴이 반복될 때 sed를 사용하여 두 패턴 사이에서 텍스트 선택

두 가지 모드 중 텍스트를 선택하고 싶은데,특정 패턴이 반복될 수 있는 경우다음과 같이.

입력은 다음과 같습니다.

Blalala
PAT1
'Omfoem From 
balanf PAT1 This is the
text that I want
to get PAT2: apples
Whatever: oranges

이것이 내가 원하는 결과입니다:

This is the
text that I want
to get

나는 이 스크립트를 사용해 보았습니다(나는 OSX를 사용하고 있습니다):

gsed -e 's/PAT1/\nPAT1\n/' -e 's/PAT2/\nPAT2\n/' file1.txt | sed -n '/PAT1/,/PAT2/{//!p;}'

그러나 다음과 같이 출력됩니다.

'Omfoem From 
balanf 
PAT1
This is the
text that I want
to get 

이 특별한 경우에는 sed -n '/PAT1/,/PAT2/{//!p;}'이를 두 번째로 적용하면 올바른 결과를 얻을 수 있습니다.

하지만 어떤 패턴이 반복되는지(횟수에 관계없이), 패턴이 전혀 반복되지 않는지 등 다양한 상황에서 작동하는 스크립트를 찾고 있습니다.

이러한 경우에 PAT1과 PAT2가 서로 가장 가까울 때 패턴 PAT1과 PAT2 사이의 텍스트를 추출할 수 있기를 원합니다.

답변1

한 가지 접근 방식은 다음과 같습니다 POSIX sed.

$ sed -e '
   /PAT1/,/PAT2/!d
   H;/PAT1/h;/PAT2/!d;g
   s/PAT2.*//;s/.*PAT1//
' file

PAT1과 PAT2가 서로 다른 라인에 있다고 가정합니다.

관련 정보