![두 문자 사이의 텍스트 추출(여러 줄 입력)](https://linux55.com/image/140697/%EB%91%90%20%EB%AC%B8%EC%9E%90%20%EC%82%AC%EC%9D%B4%EC%9D%98%20%ED%85%8D%EC%8A%A4%ED%8A%B8%20%EC%B6%94%EC%B6%9C(%EC%97%AC%EB%9F%AC%20%EC%A4%84%20%EC%9E%85%EB%A0%A5).png)
텍스트가 있는 경우:
aaaaaaaaa
#some info
other rows
end row#
another info
문자 사이의 텍스트만 추출하려면 어떻게 해야 합니까 #
?
some info
other rows
end row
나는 sed
이런 식으로 노력하고 있습니다 :
echo -e "aaaaaaaaa\n#some info\nother rows\nend row#\nanother info" |
sed -n -e '/\#/,/\#/p'
그러나 그것은 또한 나에게 성격을 부여했습니다 #
. #
사용을 제거하는 방법이 있습니까 sed
?
답변1
당신은 그것을 사용할 수 있습니다 perl
:
echo -e "aaaaaaaaa\n#some info\nother rows\nend row#\nanother info" |\
perl -0777 -ne '/#([^#]*)#/ && print $1,"\n"; '
설명하다:
-0777
전체 파일을 한 줄로 처리(여러 줄 일치 가능)/#([^#]*)#/
[^#]
사이에 #이 아닌 문자를 일치시키고#
대괄호를 사용하여 첫 번째로 일치하는 그룹으로 추가합니다.&& print $1,"\n"
발견되면 일치하는 첫 번째 그룹과 마지막 개행 문자를 인쇄합니다.
답변2
하나의 라이너를 약간 조정하십시오 sed
.
echo -e "aaaaaaaaa\n#some info\nother rows\nend row#\nanother info" |
sed -n '/^#/,/#$/ {s/#//;p;}'
산출:
some info
other rows
end row