한 쌍의 패턴이 마지막으로 나타나는 사이에 텍스트를 인쇄하는 방법은 무엇입니까?

한 쌍의 패턴이 마지막으로 나타나는 사이에 텍스트를 인쇄하는 방법은 무엇입니까?

sed를 사용하여 두 패턴 사이의 마지막 행을 다른 파일로 인쇄하려고 합니다. 예를 들어, file1에 다음이 포함되어 있는 경우:

StartPattern
1
2
3
EndPattern
4
5
StartPattern
6
7
8
EndPattern
9
10
StartPattern
11
12
13
EndPattern
14
15

나는 출력을 다음과 같이 원한다:

11
12
13

sed를 사용하여 이 작업을 어떻게 수행할 수 있나요?

답변1

싱글로프로세스:

awk '/StartPattern/{ f=1;r=""; next }f && /EndPattern/{f=0}
     f{ r=(r=="")? $0: r RS $0 }END{ print r }' file > output

output문서 내용:

11
12
13

선택하다음식물+해결책:

tac file | awk '/StartPattern/{exit}/EndPattern/{f=1;next}f' | tac > output

답변2

cat file |sed -n 'H; /^StartPattern/h; ${g;p;}' |sed -e '1d' -e '/EndPattern/q' |sed '$ d'

답변3

파일에는 다음이 포함됩니다: Patern1 line1 line2 .. 린넨 Patern1 line1 line2 .. 린넨 Patern1 line1 line2 .. 린넨 Patern1 line1 line2 .. 린넨 Patern2

패턴 1 라인 1 라인 2 .. 린넨 패턴 1 라인 1 라인 2 .. 린넨 패턴 1 라인 1 라인 2 .. 린넨 패턴 1 라인 1 라인 2 .. 린넨 패턴 2 패턴 1 라인 1 라인 2 .. 린넨 패턴 1 라인 1행 2 .. 린넨 패턴 1행 1행 2 .. 린넨 패턴 1행 1행 2 .. 린넨 패턴 2

따라서 여기에서는 Patern2가 나타나기 전에 Patern1이 여러 번 나타납니다. Patern1과 Patern2 사이의 경계를 얻고 싶습니다. Patern1과 Patern1 사이의 경계가 아닙니다.

좋아요: Patern1 line1 line2 .. 린넨 Patern2 Patern1 line1 line2 .. 린넨 Patern2 Patern1 line1 line2 .. 린넨 Patern2

고마워요 우팔

관련 정보