linux 解析密钥库文件并获取“别名”和“到期日期”的值

wgmfuz8q  于 2023-04-29  发布在  Linux
关注(0)|答案(4)|浏览(178)

我想解析一个密钥库文件,只获取“Alias name:”的值和“until:”旁边的到期日期。任何带有awk / sed的东西都可以工作。
已尝试以下2个命令来提供值。但我希望它在一个单一的命令

line=`keytool -list -v -keystore nonprod_truststore.jks | grep -e "Alias name" | awk -F'Alias name:' '{print $2}'`

line2=`keytool -list -v -keystore nonprod_truststore.jks | grep -e "until:" | awk -F'until:' '{print $2}'`

输入密钥库文件内容示例:

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
gtlvzcf8

gtlvzcf81#

使用任何awk:

$ awk 'sub(/^Alias name: /,""){name=$0} sub(/.*until: /,""){print name, $0}' file
Vaerikeysamplename004 Tue Aug 01 19:59:59 EDT 2028
ecfdbz9o

ecfdbz9o2#

使用您所展示的示例,请尝试遵循GNU awk
使用GNU awk编写并测试,使用其RSRT功能。

awk -v RS='Alias name: [^\n]*|Valid from: [^\n]*' '
RT && num=split(RT,arr,": "){
  val=(val?val OFS :"") arr[num]
}
END{
  if(val){
   print val
  }
}
'  Input_file
68de4m5k

68de4m5k3#

$ awk -F': ' '$1=="Alias name" {a=$2} / until: / {print a,$NF}' file 
Vaerikeysamplename004 Tue Aug 01 19:59:59 EDT 2028

我们使用:(colon-space)作为字段分隔符。当第一个字段是Alias name时,我们将第二个字段存储在变量a中。当一行匹配space-until-colon-space时,我们打印变量a和最后一个字段。

nkoocmlb

nkoocmlb4#

这可能对你有用(GNU sed):

sed '/Alias name: /h;/until: /H;$!d;x;s/.*: //mg;y/\n/ /' file

复制一个包含Alias name:的行,并向其追加另一个包含until:的行。
删除除最后一行以外的所有行,然后交换到副本并删除不需要的文本,并打印结果。
注:替换命令上的m标志允许多行输入。

相关问题