두 문자 사이의 텍스트 추출(여러 줄 입력)

두 문자 사이의 텍스트 추출(여러 줄 입력)

텍스트가 있는 경우:

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

관련 정보