두 번째 패턴이 일치하지 않는 경우 출력을 인쇄하지 않는 방법

두 번째 패턴이 일치하지 않는 경우 출력을 인쇄하지 않는 방법

파일 1:

pattern1
a
b
c
end

명령 =>

cat file1 | sed -n '/pattern1/,/pattern2/p'

출력 =>

pattern1
a
b
c
end

두 번째 패턴이 일치하지 않으면 어떻게 출력을 인쇄할 수 없나요?

원하는 출력:

pattern1

답변1

끝 "패턴"(끔찍한 단어 btw - 참조)이 보일 때까지 텍스트를 버퍼링해야 합니다.패턴과 일치하는 텍스트를 찾는 방법), 예를 들어 다음 awk 명령을 참조하세요.

$ cat file1
pattern1
a
b
c
end

$ sed -n '/pattern1/,/pattern2/p' file1
pattern1
a
b
c
end

$ awk '/pattern1/{f=1; print; buf=""; next} f{buf=buf $0 ORS; if (/pattern2/) {printf "%s", buf; f=0} }' file1
pattern1

$ awk '/pattern1/{f=1; print; buf=""; next} f{buf=buf $0 ORS; if (/end/) {printf "%s", buf; f=0} }' file1
pattern1
a
b
c
end

관련 정보