출력 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}"