sed를 사용하여 시작과 끝 사이의 줄 인쇄

sed를 사용하여 시작과 끝 사이의 줄 인쇄

두 구분 기호 사이에 줄을 인쇄해야 합니다. 예를 들어, 입력이 주어지면

fluff1
fluff2
BEGIN
good3
good4
END
fluff5
fluff6
BEGIN
good7
good8
END
more fluff

내가 원하는 출력은

good3
good4
good7
good8

나는 그것을 사용하는 방법을 알고 있지만 awk더 짧은 솔루션을 찾고 싶습니다 sed.

다음과 같기를 바라지만 이는 물론 잘못된 구문입니다.

sed -n '/BEGIN/+1,/END/-1p'

답변1

sed -n -e '/^BEGIN$/,/^END$/{/^BEGIN$/d;/^END$/d;p;}' input

답변2

GNU sed3.95 이상을 사용하면 다음을 수행할 수 있습니다.

sed '/^BEGIN$/,/^END$/!d;//d'

다른 경우에는 sed다음과 같이 작성해야 할 수도 있습니다.

sed '/^BEGIN$/,/^END$/!d;//d;/^BEGIN$/d'

심지어

sed '/^BEGIN$/,/^END$/!d;/^END$/d;/^BEGIN$/d'

비지박스(Busybox)와 같습니다 sed.

또한보십시오sed FAQ

답변3

구분 기호를 반복하지 않으려면 Perl을 사용할 수 있습니다.

perl -ne '/BEGIN/ && do {$a=1; next}; $a=0 if /END/; print if $a' input

HaukeLaging을 수정할 수도 있습니다.답변변수 사용:

b="BEGIN"; e="END"; sed -n -e "/^$b$/,/^$e$/{/^$b$/d;/^$e$/d;p}" input

답변4

또는 구분 기호를 포함하려면 다음을 수행할 수 있습니다.sed -ne "/BEGIN/,/END/{p;}" $INPUT

관련 정보