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