두 구분 기호 사이에 줄을 인쇄해야 합니다. 예를 들어, 입력이 주어지면
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 sed
3.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