在 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个字段(所需字段),然后exit
s
如果 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
当我导入我的 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个字段(所需字段),然后exit
s
如果 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