## 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:]]*## //'
이렇게 하면 시작 및 종료 패턴에 포함되지 않은 모든 항목이 삭제됩니다. 그런 다음 시작 패턴을 제거하고 끝 패턴을 빈 줄(블록 구분 기호가 됨)로 바꿉니다.