如何从 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 sed使用 Gnu 特定的T 反向测试命令构造

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

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

awk字段分隔符设置为“one_or_more_spc=one_or_more_spc”,并在确保适当的第一个字段和行恰好有两个字段后打印第二个字段。

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

相关内容