如何grep搜索字符串并剔除指定前缀?提取SSL证书到期日期
提取SSL证书到期日期的时间部分
问题描述
我尝试用这条命令查询SSL证书的到期日期:
openssl s_client -connect ${CERT}:443 </dev/null 2>&1 | openssl x509 -text | grep "Not After"
终端输出格式是:
Not After : Apr 14 10:06:09 2018 GMT
我希望剔除掉前面的“Not After : ”部分,只保留后面的日期时间字符串,恳请帮忙!
解决方案
没问题!这里有几种简单的文本处理方法可以实现你的需求:
方法1:使用sed替换匹配前缀
直接用替换语法把不需要的前缀清空:
openssl s_client -connect ${CERT}:443 </dev/null 2>&1 | openssl x509 -text | grep "Not After" | sed 's/Not After : //'
sed 's/原内容/替换内容/'是最常用的文本替换逻辑,这里把“Not After : ”直接替换为空,剩下的就是你要的日期串了。
方法2:使用awk分割字符串
指定分隔符为“Not After : ”,直接取分割后的第二部分内容:
openssl s_client -connect ${CERT}:443 </dev/null 2>&1 | openssl x509 -text | grep "Not After" | awk -F "Not After : " '{print $2}'
awk会把输入行按指定分隔符拆分成多个字段,这里第二个字段正好就是我们需要的日期时间。
方法3:cut配合sed处理(备选)
如果习惯用cut,可以先按冒号分割,再去掉开头的空格:
openssl s_client -connect ${CERT}:443 </dev/null 2>&1 | openssl x509 -text | grep "Not After" | cut -d ':' -f 2- | sed 's/^ //'
cut -d ':' -f 2-会提取第二个冒号后的所有内容(此时开头会多一个空格),再用sed 's/^ //'把开头空格去掉即可。
前两种方法更直接,推荐优先使用sed或awk的方案~
内容的提问来源于stack exchange,提问作者tnoel999888
相关产品推荐
相关产品推荐

