如何用单条awk/sed命令解析keystore获取别名与过期时间
问题
需要解析keystore文件,仅提取Alias name:对应的别名,以及until:后的证书过期时间,要求用awk或sed实现单条命令。此前已通过两条分开的keytool命令分别获取对应值,现希望合并为一条命令。
示例输入(keystore文件内容)
Alias name: Vaerikeysamplename004 Creation date: Mar 25, 2004 Entry type: trustedCertEntry Owner: OU=VeriSign Trust Network, OU="(c) 1998 VeriSign, Inc. - For authorized use only", OU=Class 1 Public Primary Certification Authority - G2, O="VeriSign, Inc.", C=US Issuer: OU=VeriSign Trust Network, OU="(c) 1998 VeriSign, Inc. - For authorized use only", OU=Class 1 Public Primary Certification Authority - G2, O="VeriSign, Inc.", C=US Serial number: 1234jeyjfffdfd Valid from: Sun May 17 20:00:00 EDT 1998 until: Tue Aug 01 19:59:59 EDT 2028 Certificate fingerprints: MD5: DB:23:3D:F9:99:FA:4B:33:95:ee:44:73:5E:7D:41:83 SHA1: 27:3E:ss:24:57:FD:C4:F9:0C:55:E8:2B:56:16:ff:62:F5:32:E5:47 SHA256: 34:1D:E9:8B:13::6E:C6:5B:9A:51:CE:6E:D0:67:D0:0E:C7:CE:9B:7F Signature algorithm name: RSASHASAM Subject Public Key Algorithm: 1024-bit RSA key Version: 1
期望输出
Vaerikeysamplename004 Tue Aug 01 19:59:59 EDT 2028
解决方案
可以用awk实现单条命令,同时提取别名和过期时间并合并输出:
1. 直接处理keystore文件
awk '/Alias name:/{alias=$3} /until:/{for(i=8;i<=NF;i++) time=time" "$i} END{print alias, substr(time,2)}' your_keystore_file
2. 直接对接keytool输出(无需保存文件)
如果是通过keytool命令直接读取keystore信息,可将输出管道给awk:
keytool -list -v -keystore your_keystore_file -storepass your_password | awk '/Alias name:/{alias=$3} /until:/{for(i=8;i<=NF;i++) time=time" "$i} END{print alias, substr(time,2)}'
命令说明
/Alias name:/{alias=$3}:匹配到Alias name:行时,提取第3个字段作为别名/until:/{for(i=8;i<=NF;i++) time=time" "$i}:匹配到包含until:的行时,从第8个字段开始拼接所有内容作为过期时间(until:在该行的第7个字段位置)END{print alias, substr(time,2)}:处理完所有行后,输出别名和去掉开头空格的过期时间
内容的提问来源于stack exchange,提问作者Evangeline Amalina
相关产品推荐
相关产品推荐

