두 가지 모드 중 텍스트를 선택하고 싶은데,특정 패턴이 반복될 수 있는 경우다음과 같이.
입력은 다음과 같습니다.
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가 서로 다른 라인에 있다고 가정합니다.