我从正在分析网站上的证书的程序导出以下字符串,该程序将成为错误修正分析的一部分
CERT_SUMMARY:127.0.0.1:127.0.0.1:631:sha256WithRSAEncryption:
/O=bfcentos7-test/CN=bfcentos7-test/emailAddress=root$bfcentos7-
test:/O=bfcentos7-test/CN=bfcentos7-test/emailAddress=root$bfcentos7-
test:170902005715Z:270831005715Z:self signed certificate
(考虑上面的输出是单行)
我需要的是bash shell中提取sha256WithRSAEncryption
的最佳方法。这可能是sha384withRSAEncryption
或其他类似的东西。
在CERTSUMMARY
之后,127.0.0.1:127.0.0.1:portnum
总是631
高于其端口CERT_SUMMARY:127.0.0.1:127.0.0.1:52311:sha256WithRSAEncryption:
/CN=ServerSigningCertificate_0/name=Type`Administrator
/name=DBName`ServerSigningCertificate_0:/C=US/CN=BLAHBLAH/
ST=California/L=Address, Emeryville CA 94608/O=IBM BigFix Evaluation
License/OU=Customer/emailAddress=blahblay@gmail.com/name=
Hash`sha1/name=Server`bigfix01/name=CustomActions`Enable
/name=LicenseAllocation`999999/name=CustomRetrievedProperties`Enable:
170702212459Z:270630212459Z:unable to get local issuer certificate
,但它可能是任何东西。
这在系统内部运行,并返回此字符串以及SSL或TLS(未图示)
这是另一个返回的例子
fmapTwice :: (Functor f) => (a -> a) -> f a -> f a
fmapTwice f = fmap (f . f)
提前致谢。 新手在shell编程,但学习!!
答案 0 :(得分:2)
你需要最好的方式,但似乎没有提供最好的描述 - “这可能是sha384withRSAEncryption或其他东西。” 给出这些示例,您要查找的字符串是第4个,当:是分隔符时,命令应该是OK:
cut -f4 -d":"
如果输出字符串具有严格的长度格式,一个简单的选项是带有-c的'cut'命令。但事实并非如此,因为有一个端口号。 CERT_SUMMARY:127.0.0.1:127.0.0.1:631:sha256WithRSAEncryption:
答案 1 :(得分:1)
正如@cyrus指出的那样,这就像用awk选择正确的列一样简单......我正在学习。 这工作
awk -F ":" '/CERT_SUMMARY/ {print $5}'
感谢您的帮助!!
答案 2 :(得分:1)
| sed -E 's/^([^:]*:){4}([^:]*):.*/\2/'
正则表达式是你的朋友。如果有人需要进行大量的字符串解析或字符串处理,那么确实应该熟悉一件事,它肯定是正则表达式。
echo 'CERT_SUMMARY:127.0.0.1:127.0.0.1:52311:sha256WithRSAEncryption:
/CN=ServerSigningCertificate_0/name=Type`Administrator
/name=DBName`ServerSigningCertificate_0:/C=US/CN=BLAHBLAH/ST=California
/L=Address, Emeryville CA 94608/O=IBM BigFix Evaluation
License/OU=Customer/emailAddress=blahblay@gmail.com/name=Hash`sha1
/name=Server`bigfix01/name=CustomActions`Enable
/name=LicenseAllocation`999999
/name=CustomRetrievedProperties
`Enable:170702212459Z:270630212459Z:unable to get local issuer
certificate'
| sed -E 's/^([^:]*:){4}([^:]*):.*/\2/'
打印
sha256WithRSAEncryption
这里可能有点矫枉过正,但是正则表达式几乎没有任何东西是无法完成的,因为你现在已经在许多语言中内置了正则表达式支持,因此了解正则表达式永远不会是浪费时间。
另请参阅here以获得每个正则表达式实际含义的详细解释,包括交互式编辑视图。基本上我告诉正则表达式解析器跳过前4个组,其中包含任意数量的非:
个字符,后跟单个:
,然后捕获由任意组成的第5个组非:
的字符数,最后匹配字符串末尾的任何其他内容(无论如何)。整个正则表达式是sed"替换"的一部分。操作,我只用第二个捕获组捕获的内容替换整个字符串(圆括号中的所有内容都是一个捕获组)。
答案 3 :(得分:0)
请问您也可以使用以下内容,而不是按字段编号打印,所以如果您的Input_file的sha256位置在这里有点而且显示的位置不是那么,那么这也可能更有用。
awk '{match($0,/sha.*Encryption:/);if(substr($0,RSTART,RLENGTH)){print substr($0,RSTART,RLENGTH-1)}}' Input_file
答案 4 :(得分:0)
将输出传输到:
awk ‘BEGIN{FS=“:”} {print $5}’
答案 5 :(得分:0)
您还可以退回到openssl x509命令'name options'。使用sep_comma_plus可以避免输出中的斜杠,因此正则表达式会更简单。