다른 패턴이 일치할 때까지 일치하는 패턴을 인쇄합니다.

다른 패턴이 일치할 때까지 일치하는 패턴을 인쇄합니다.

패턴이 일치된 후 파일의 다른 패턴이 여러 번 일치할 때까지 텍스트를 인쇄하려고 합니다. 주어진 스크립트를 수정하려고 합니다.여기그러나 그렇게 하지 못했습니다. 예를 들어. 내용은file1.txt

example text
more example
pattern1
important text
very important 
need this too
pattern2
i dont require this
junk text
more junk
pattern1
important text
very important 
need this too
pattern2
junk

예상 출력

pattern1
important text
very important 
need this too
pattern1
important text
very important 
need this too

누군가 수정을 제안할 수 있나요?

감사해요.

답변1

패턴(경계 포함) 사이의 행 간 일치는 sed의 표준 범위 선택기입니다.

sed -n -e '/pattern1/,/pattern2/p' example.txt

효율성을 얼마나 중요하게 생각하는지(파일의 크기)에 따라 게을러서 두 번째 패스를 사용하여 패턴2 마커를 제거할 수 있습니다.

cat example.txt \
| sed -n -e '/pattern1/,/pattern2/p' \
| sed    -e '/pattern2/d'

< example.txt | sed ... | sed ...(예, 이것은 성능 저하보다 여러 파이프 필터를 연결하는 가독성을 선호하기 때문에 cat의 쓸모없는 사용입니다. 그리고 이것이 POSIX 명령인지 아니면 단지 bash 및 zsh에 존재하는 확장인지 지금은 확실하지 않습니다. )

관련 정보