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
고마워요 우팔