连接'keytool -list'输出中的证书行


Java keytool命令用于管理Java密钥库。在本例中,我列出了任何Java运行时附带的cacerts文件的内容。命令是:
keytool -list -keystore ./cacerts -storepass somethingorother

输出如下:

Keystore type: jks Keystore provider: SUN
Your keystore contains 164 entries
wizardgeneratedalias, Nov 17, 2020, trustedCertEntry, Certificate fingerprint (SHA1):BA:14:BF:5D:17:2F:F8:FE:29:44:90:12:46:C1:46:B1:C6:80:CB:6F securetrustca [jdk], Nov 7, 2006, trustedCertEntry, 
Certificate fingerprint (SHA1): 87:82:C6:C3:04:35:3B:CF:D2:96:92:D2:59:3E:7D:44:D9:34:FF:11

在报头之后,每个证书以两行呈现,第一行以存储的证书的别名("wizardgeneratedalias"(开始,以"wizard"结束;trustedCertEntry;第二个以"0"开头;证书指纹";。

我想随时将这两行合并为一行,这样我就可以通过管道发送到下一个命令,无论是grep还是sort等等。

在vim中,它非常简单:

:g/trustedCert/s/,$n/, /

基本上在这里搜索具有字符串"g"的任何(g/(行;trustedCert";,在行尾找一个逗号和一个换行符,然后用逗号和空格替换。

我从来没有想过如何用awk或sed(无论如何都不是sed的东西(或perl来实现这一点。

谢谢!

在每个UNIX盒子上的任何shell中使用任何awk,并且不将整个输入读取到内存中(在这种特定情况下可能不是什么大事(:

$ cat file | awk '{printf "%s%s", $0, (/trustedCertEntry,[[:space:]]*$/ ? "" : ORS)}'
Keystore type: jks Keystore provider: SUN
Your keystore contains 164 entries
wizardgeneratedalias, Nov 17, 2020, trustedCertEntry, Certificate fingerprint (SHA1):BA:14:BF:5D:17:2F:F8:FE:29:44:90:12:46:C1:46:B1:C6:80:CB:6F securetrustca [jdk], Nov 7, 2006, trustedCertEntry, Certificate fingerprint (SHA1): 87:82:C6:C3:04:35:3B:CF:D2:96:92:D2:59:3E:7D:44:D9:34:FF:11

在上面的文章中,我只是使用cat file来代替您正在运行的任何要通过管道传输到awk的命令。

要删除包含字符串trustedCert的行上的新行chomp,只需执行以下操作:

perl -pe'chomp if /trustedCert/' 

根据使用此命令的方式,应用程序会有所不同。

直接等价物是

perl -pe'/trustedCert/ and s/,n/, /'

但是没有必要进行两场比赛。

perl -pe's/trustedCert.*,Kn/ /'

指定要处理的文件到Perl一行。


TLP的解决方案不检查逗号,也不用空格替换换行符。

sed -zn 's/trustedCertEntry,n/trustedCertEntry, /gp'

将输出作为单行使用,然后替换trustedCertEntry,并使用trustedCert Entry和空格替换新行

最新更新