Java keytool命令用于管理Java密钥库。在本例中,我列出了任何Java命令附带的runtime.The文件的内容:
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")开始,以"trustedCertEntry“结束,第二行以”证书指纹“开始。
我想动态地将这两行合并为一行,这样我就可以通过管道连接到下一个命令,无论是grep、sort还是其他任何东西。
在vim中,这非常简单:
:g/trustedCert/s/,$\n/, /基本上在这里搜索任何带有字符串"trustedCert“的(g/)行,查找行尾的逗号和换行符,并将其替换为逗号和空格。
我只是从来没有摸索过如何使用awk或sed (无论如何不是sed的东西)或perl来做到这一点。
谢谢!
发布于 2020-11-19 06:43:52
在每个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的命令。
发布于 2020-11-19 04:55:32
要删除包含字符串trustedCert的行上的换行符chomp,只需执行以下操作:
perl -pe'chomp if /trustedCert/' 根据您使用此命令的方式,应用程序会有所不同。
发布于 2020-11-19 05:16:42
直接的等价物是
perl -pe'/trustedCert/ and s/,\n/, /'但不需要执行两个匹配。
perl -pe's/trustedCert.*,\K\n/ /'Specifying file to process to Perl one-liner。
TLP's solution不会检查逗号,也不会用空格替换换行符。
https://stackoverflow.com/questions/64901150
复制相似问题