스크립트 자체에서 도움말 메시지를 추출하고 싶습니다.
#!/bin/bash
#
# foo - do things
# Author: John Doe <jhon@doe>
# ----------------------------------------------
# SYNOPSIS
# foo [OPTIONS] FILE
#
# DESCRIPTION
# At vero eos et accusamus et iusto odio
# dignissimos ducimus qui blanditiis praesenti
# voluptatum deleniti atque corrupti quos.
# ----------------------------------------------
sed -n '/# -\+$/,/# -\+$/ p' $0
효과가있다! 두 구분 기호 사이 # -\+$
와 두 구분 기호를 포함하는 내용만 인쇄합니다 . 문제는 구분 기호를 인쇄하고 싶지 않다는 것입니다.
인간 친화적인 구문을 갖춘 매뉴얼 페이지 생성기에 대한 제안 사항이 있습니까?
고쳐 쓰다:어쩌면 내 질문이 제대로 표현되지 않았을 수도 있습니다. 로 시작 하고 로 끝나는 # -----
두 줄 사이의 내용을 인쇄하고 싶습니다 ----
.
나는 이 해결책을 알고 있습니다:
sed -n '/# -\+$/,/# -\+$/ p' $0 | head -n -1 | tail -n +2
하지만 저는 너무 진부해 보이지 않는 깨끗하고 우아한 솔루션을 원했습니다.
답변1
이것을 시도해 보십시오:
#!/bin/bash
#
# foo - do things
# Author: John Doe <jhon@doe>
# ----------------------------------------------
# SYNOPSIS
# foo [OPTIONS] FILE
#
# DESCRIPTION
# At vero eos et accusamus et iusto odio
# dignissimos ducimus qui blanditiis praesenti
# voluptatum deleniti atque corrupti quos.
# ----------------------------------------------
cat `which $0` | sed -n '0,/# -\+$/d;/# -\+$/,$d;p'
답변2
답변3
이 작업은 매우 간단하게 수행할 수 있습니다 awk
.
awk -v RS='\n# -+' 'NR==2' $0
RS
레코드 구분 기호를 적절하게 설정하고 NR==2
두 번째 레코드를 인쇄합니다.
gsub
예를 들어 다음을 사용하여 주석 기호와 추가 공백을 제거할 수 있습니다 .
awk -v RS='\n# -+' 'NR==2 { gsub("\n# ", "\n"); print }' $0
고쳐 쓰다
첫 번째 행이 비어 있는 것을 방지하려면 에 추가하세요 \n
. RS
하지만 이제 첫 번째 행은 바뀌지 않으므로 gsub
다음과 같이 gensub
호출됩니다.
awk -v RS='\n# -+\n' 'NR==2 { print gensub("(^|\n)# ", "\\1", "g") }' $0
답변4
필요한 것은 "여기에 문서화"라고 합니다. 다행히도 이미 bash에 구현되어 있습니다. 다음 URL을 확인하세요http://tldp.org/LDP/abs/html/here-docs.htm나
다음을 사용하면 됩니다:
cat <<end-of-message
----------------------------
message lines...
----------------------------
end-of-message
인수가 입력되거나 -h 옵션과 같은 것이거나 인수가 없는 경우에만 인쇄하는 조건을 스크립트 상단에 추가할 수 있습니다.