조직 태그 간 텍스트 인쇄

조직 태그 간 텍스트 인쇄

## mode: org일치하는 줄 과 ## # End of org파일 사이에 포함된 텍스트 섹션을 섹션 사이에 빈 줄로 인쇄하는 bash 함수를 작성하고 싶습니다 . 앞에는 ##공백이 얼마든지 있을 수 있습니다.

다음은 정보를 추출할 파일의 예입니다.

file: test.sh

## mode: org
## * Using case statement
## # End of org
case $arg in
 ("V")
   echo "Author"
   ;;
 (*)
   ## mode: org
   ## ** Silent Error Reporting Mode (SERM) in getopts
   ## *** Detects warnings without printing built-in messages.
   ## *** Enabled by colon {:} as first character in shortopts.
   ## # End of org
   break
   ;;
esac

원하는 출력은 다음과 같습니다.

* Using case statement

** Silent Error Reporting Mode (SERM) in getopts
*** Detects warnings without printing built-in messages.
*** Enabled by colon {:} as first character in shortopts.

나는 그것을했다

capture-org ()
{
  sed -n '/^ *## mode: org$/,/^ *## # End of org$/s/ *//p' "$1" |
   sed 's/^## mode: org$/\n## mode: org/' |
   sed '/^## mode: org$/d' | sed '/^## # End of org$/d' | cut -c 3-
}

좀 더 깔끔한 방식으로 할 수 있을까요?

답변1

sed '/^[[:space:]]*## mode: org$/,/^[[:space:]]*## # End of org$/!d; /^[[:space:]]*## mode: org$/d; s/^[[:space:]]*## # End of org$//g; s/^[[:space:]]*## //'

이렇게 하면 시작 및 종료 패턴에 포함되지 않은 모든 항목이 삭제됩니다. 그런 다음 시작 패턴을 제거하고 끝 패턴을 빈 줄(블록 구분 기호가 됨)로 바꿉니다.

관련 정보