perl - 连接来自“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”)开头,以“trustedCertEntry”结尾,第二行以“证书指纹”开头。
我想将这两行动态组合成一条,这样我就可以通过管道传递到下一个命令,无论是 grep 还是 sort 或 whatevs。
在 vim 中非常简单:
:g/trustedCert/s/,$\n/, /
基本上在这里搜索带有字符串“trustedCert”的任何 (g/) 行,在行尾查找逗号和换行符,然后用逗号和空格替换它。
我从来没有想过如何用 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 的命令。
推荐阅读
- cron - wg-quick up 在从 crontab 运行时抛出“名称解析中的临时失败”,但在从 shell 运行时工作正常
- python - 基于另一个图形创建一个图形
- apache-camel - Apache camel - 如何检索给定组件的端点 URI
- python - Numpy 基于行索引沿轴应用
- flutter - future 方法在 null - flutter 中被调用
- c++ - 使用 reinterpret_cast 通过引用传递值
- terraform - 运行 EMR 作业流程时出错:ValidationException
- web-scraping - Python 从网络标头请求 403 Forbidden referer
- docker - 如何在 Host 模式下使用服务名访问容器?
- android - 如何在 Jetpack Compose 中使用图标切换按钮?