关于OpenSSL命令中|$的作用及公钥信息过滤逻辑的技术咨询
关于OpenSSL命令中|$的作用及公钥信息过滤逻辑的技术咨询
嘿,我来帮你拆解这个OpenSSL命令的过滤逻辑,搞清楚它是怎么精准抓出那些公钥相关内容的:
先拆分整条命令的各个环节
咱们把这条长命令拆成三段来看,每一段各司其职:
第一段:导出证书文本详情
openssl x509 -in cacert.pem -noout -text
这部分的作用是读取cacert.pem里的CA证书,只输出证书的可读文本详情(-noout参数是告诉OpenSSL别输出证书本身的二进制内容,只返回人类能看懂的文本信息)。第二段:核心过滤逻辑(重点是
|$)grep -Ei ".*public.*|$"
这是过滤的关键,咱们拆解这个正则表达式:-Ei:-E表示使用扩展正则语法,-i表示忽略大小写,所以不管是Public还是public都会被匹配到。.*public.*:匹配任何包含“public”(大小写无关)的行,比如你示例里的Subject Public Key Info:、Public Key Algorithm: rsaEncryption、RSA Public-Key: (4096 bit)这些行都符合条件。|$:这里的|是正则里的“或”逻辑,$匹配空行(也就是行首到行尾没有任何字符的行)。所以这部分的作用是同时保留所有包含public的行,以及所有空行。
为什么要保留空行?因为证书的文本详情里,不同信息区块是用空行分隔的,保留空行能让过滤后的公钥区块更清晰,不会挤成一团难读。
第三段:优化阅读体验
less -Rx-R是让less工具保留输出里的颜色(如果OpenSSL输出带颜色标记的话),-x是把制表符转换成空格,让排版更整齐,方便你滚动查看内容。
为什么能得到你展示的加粗内容?
你给出的示例里,Technical College, CN = Jim's Root CA这行因为不包含“public”,也不是空行,所以被grep过滤掉了;而那些和公钥相关的行(就是你加粗的部分)因为包含“public”被保留,同时公钥区块前后的空行也被保留,最终就得到了干净的公钥信息区块。
备注:内容来源于stack exchange,提问作者Johnny Garcia
相关产品推荐
相关产品推荐

