在Bash中提取部分字符串

时间:2016-10-24 14:12:17

标签: linux bash macos macos-sierra

当我导入我的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

我运行的返回输出的命令如下:

gpg --import "public.key"

2 个答案:

答案 0 :(得分:1)

尝试使用grep:

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

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

答案 1 :(得分:1)

使用awk

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

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

如果gpg输出到STDERR:

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

对于年龄较大的bash

gpg --import "public.key" 2>&1 | awk -F '[ :]' 'NR==1 {print $4; 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 $4; exit}' file.txt
LOL12345