当我执行此命令时,我得到以下 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
}'