如何使用“grep”获取gpg密钥指纹值?

如何使用“grep”获取gpg密钥指纹值?

如果 的输出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]

如何从输出中仅 grep“D8524A558964E86Cxxxx93111270xxxxxxxx7A74”?我正在使用Linux。

答案1

从手册页:

切勿在脚本或其他程序中使用此命令的输出。输出仅供人类使用,其格式可能会发生变化。 --with-colons 选项以稳定的、机器可解析的格式发出输出,该格式供脚本和其他程序使用。

--with-colons
打印由冒号分隔的关键列表。请注意,无论任何 --display-charset 设置如何,输出都将以 UTF-8 进行编码。当从脚本和其他程序调用 GnuPG 时,这种格式非常有用,因为它很容易被机器解析。此格式的详细信息记录在文件“doc/DETAILS”中,该文件包含在 GnuPG 源代码发行版中。

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

您可以尝试获取所有出现的仅包含十六进制数字的 40 个字符长的单词。也不是很科学,但解决了问题。

gpg --list-secret-keys --keyid-format=long \
| grep --only-matching --extended-regexp "[[:xdigit:]]{40}"

相关内容