"grep"을 사용하여 gpg 키 지문 값을 얻는 방법은 무엇입니까?

"grep"을 사용하여 gpg 키 지문 값을 얻는 방법은 무엇입니까?

출력 gpg --list-secret-keys --keyid-format=long

pub   rsa3072 2023-01-13 [SC] [expires: 2025-01-12]
  D8524A558964E86Cxxxx93111270xxxxxxxx7A74
uid           [ultimate] demo(demo) <demo>
sub   rsa3072 2023-01-13 [E] [expires: 2025-01-12]

출력에서 "D8524A558964E86Cxxxx93111270xxxxxxxx7A74"만 grep하려면 어떻게 해야 합니까? 저는 리눅스를 사용하고 있습니다.

답변1

매뉴얼 페이지에서:

스크립트나 다른 프로그램에서 이 명령의 출력을 사용하지 마십시오. 출력은 사람이 사용하기 위한 것이며 형식은 다를 수 있습니다. --with-colons 옵션은 스크립트 및 기타 프로그램에서 사용할 수 있는 안정적이고 기계 분석이 가능한 형식으로 출력을 내보냅니다.

--with-colons
콜론으로 구분된 키 목록을 인쇄합니다. --display-charset 설정에 관계없이 출력은 UTF-8로 인코딩됩니다. 이 형식은 컴퓨터에서 쉽게 구문 분석할 수 있기 때문에 스크립트 및 기타 프로그램에서 GnuPG를 호출할 때 유용합니다. 이 형식의 세부사항은 GnuPG 소스 배포판에 포함된 "doc/DETAILS" 파일에 문서화되어 있습니다.

doc/DETAILS최신 정보를 찾을 수 있습니다거기예를 들어.

그래서:

gpg --list-secret-keys --with-colons |
  awk -F: '$1 == "fpr" || $1 == "fp2" {print $10}'

거기에 나열된 모든 키에 대한 지문을 인쇄합니다.

( --keyid-format원하는 지문이므로 중요하지 않습니다.)

답변2

(매우 과학적인 것은 아니지만) 한 가지 해결책은 명령을 실행하고큰 말(20자 이상)

gpg...... | grep -Po '\w{20,}'

답변3

찾고 있는 값이 항상 두 번째 행에 있는 경우 다음과 같이 사용할 수 있습니다.

gpg --list-secret-keys --keyid-format=long | sed '2!d' | tr -d " "

답변4

16진수만 포함하는 40자 단어의 모든 항목을 가져오려고 시도할 수 있습니다. 그다지 과학적이지는 않지만 문제를 해결합니다.

gpg --list-secret-keys --keyid-format=long \
| grep --only-matching --extended-regexp "[[:xdigit:]]{40}"

관련 정보