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最初のフィールドが適切で、行に正確に2つのフィールドがあることを確認してから、2番目のフィールドを印刷します。

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

おすすめ記事