gpg의 명령줄에서 키의 특정 문자열 값을 얻는 방법은 무엇입니까?

gpg의 명령줄에서 키의 특정 문자열 값을 얻는 방법은 무엇입니까?

이 명령을 실행하면 다음과 같은 Keygrip 값이 표시되지만 값은 2입니다. "sec" 섹션에 있어야 하는 첫 번째 Keygrip 값(0FCB25C3D73CC979F7732F5690E958A580D873B9)을 어떻게 얻나요?

root $> gpg --with-keygrip --list-secret-keys  F9211C72F41103B4

sec   rsa2048 2020-08-19 [SC]
      BC777712D75642B7F3D50980F6031C73F46103B4
      Keygrip = 0FCB25C3D73CC979F7732F5690E958A580D873B9   //<-- how to get this one
uid           [ultimate] Kalib Zen (Backup Key) <[email protected]>
ssb   rsa2048 2020-08-19 [E]
      Keygrip = 75DECACEB6DDDDDDDDDDDDDDDD28392832323232

답변1

gpg 명령의 출력을 아래 표시된 grep /sed/awk 명령으로 파이프합니다.

GNU grep활성화된 PCRE 엔진을 사용하고 ( -P), 일치하는 부분만 선택하고( -o), 첫 번째 일치하는 부분만 가져옵니다( -m1). \K라인에 포함되지 않은 부분을 피하기 위해 사용됩니다 .

grep -Pom1 '^ *Keygrip += +\K.*'

GNU sedGnu 특정 T 역방향 테스트 명령 구성 사용

sed -Ene 's/^ *Keygrip += +//;T;p;q'

###Or Posixly, 
sed -e '/^ *Keygrip  *=  */!d;s///;q' 

필드 구분 기호를 "one_or_more_spc=one_or_more_spc"로 설정하고 awk첫 번째 필드가 적절하고 행에 정확히 두 개의 필드가 있는지 확인한 후 두 번째 필드를 인쇄합니다.

awk -F' += +' '
  /^ *Keygrip / && NF==2 {
    print $2;exit
  }'

관련 정보