在 Bash 中提取部分字符串

Extract part of string in Bash

当我导入我的 GPG 密钥时,我收到回复:

gpg: key LOL12345: public key "John Doe (Developer) <john@doe.com>" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)

我非常想提取密钥的 ID LOL12345

命令我运行即returns输出如下:

gpg --import "public.key"

尝试使用 grep:

yourCommand | grep -Po -m 1 'gpg: key \K\w+'

-P 使用 perl 正则表达式样式。
-o 只打印匹配的部分。
-m 1 第一场比赛结束后退出。这将确保密钥不会被多次打印。
\K一旦匹配,忘记\K左边的匹配部分。
\w+ 匹配尽可能多的字母数字字符。

awk:

gpg --import "public.key" | awk -F '[ :]' 'NR==1 {print ; exit}'
  • -F '[ :]' 设置字段分隔符为 space 或 :

  • NR==1匹配第一行,{print ; exit}打印第4个字段(所需字段),然后exits

如果 gpg 输出到 STDERR:

gpg --import "public.key" |& awk -F '[ :]' 'NR==1 {print ; exit}'

大一点的 bash:

gpg --import "public.key" 2>&1 | awk -F '[ :]' 'NR==1 {print ; exit}'

示例:

% cat file.txt
gpg: key LOL12345: public key "John Doe (Developer) <john@doe.com>" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
gpg: key LOL12345: secret key imported
gpg: key LOL12345: "John Doe (Developer) <john@doe.com>" not changed
gpg: Total number processed: 1
gpg:              unchanged: 1
gpg:       secret keys read: 1
gpg:   secret keys imported: 1

% awk -F '[ :]' 'NR==1 {print ; exit}' file.txt
LOL12345