명령을 제외한 모든 인수를 가져 오기 위해 명령의 도움말 파일을 구문 분석하려고합니다.
다음은 도움말 파일의 일부 텍스트입니다.
* --digest:
Set the digest for fingerprinting (defaults to the digest used when
signing the cert). Valid values depends on your openssl and openssl ruby
extension version.
* --debug:
Enable full debugging.
* --help:
Print this help message
* --verbose:
Enable verbosity.
* --version:
Print the puppet version number
그냥 잡고 싶어요 --argument
.
이 명령으로 거의 가져 왔지만 여전히 제외하고 싶은 ":"이 포함되어 있습니다.
puppet cert --help | egrep '^* --(.*):$' | awk '{print $2}'
--all:
--allow-dns-alt-names:
--digest:
--debug:
--help:
--verbose:
--version:
'^* --(.*):$'
":"를 포함하는 이유 는와 사이의 모든 항목 '^* --'
과 일치하지 않아야 ':$'
합니까?
^* --
과 사이의 모든 것을 일치시켜야하지:$
않습니까?
사실은 아닙니다. 그룹을 캡처하고 있지만 그룹 만 인쇄하지는 않습니다. -P
플래그를 사용하여 Perl 정규식을 사용하고 둘러 보는 것이 좋습니다 . 귀하의 경우에는 이것으로 충분할 수 있습니다.
$ cert --help | grep -Po '^\* \K--\w+'
또한 -o
옵션을 사용 하여 전체 행이 아닌 일치하는 내용 만 인쇄했습니다. 이것은 awk 의 사용을 제거합니다 .
초기 생각과 더 많은 둘러보기를 기반으로 한 더 완전한 라인 :
$ cert --help | grep -Po '^\* \K--.*(?=:)'
편집 : mklement0 의 주석과 훌륭한 답변에서 언급했듯이 GNU grep이 필요합니다. 그러나 시스템에 이미 설치되어있는 Perl 자체에서도 동일한 작업을 수행 할 수 있습니다.
$ cert --help | perl -nle 'print $1 if /^\* (--\w+)/'
이것은 루프 내부의 코드 줄처럼 작동합니다. 에 의해 자동으로 생성됩니다 -nle
. -n
입력보기, -l
자동 줄 바꿈 및 -e
코드 줄 표시를 위해.
Perl 코드 행은 해당 행이 정규식과 일치하는 경우 첫 번째 캡처 된 그룹을 인쇄합니다. 따라서 원래 솔루션의 아이디어도 결합합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다