스크립트 자체에서 도움말 정보 추출

스크립트 자체에서 도움말 정보 추출

스크립트 자체에서 도움말 메시지를 추출하고 싶습니다.

#!/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

다음 방법으로 이 작업을 수행할 수도 있습니다 awk.

awk '/^# --/{ flag=!flag; next}; flag' file

원하는 텍스트를 분리하는 데 사용하는 텍스트의 시작과 끝이 동일하다고 가정하면 # --잘 작동합니다 .범위 모드실패하므로 플래그를 사용해야 합니다. 이것다음 진술범위를 인쇄하기 전에 awk가 다음 레코드로 이동하도록 강제합니다.

답변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 옵션과 같은 것이거나 인수가 없는 경우에만 인쇄하는 조건을 스크립트 상단에 추가할 수 있습니다.

관련 정보