如何从可变长度证书日期字符串中删除HH MM SS段 输出MM DD YYYY格式
问题场景
我尝试在如下示例中删除日期里的时、分、秒部分:
data=`security find-certificate -c "ABC Company Root 2016 CA" -p | openssl x509 -text | grep "Not After"` echo $data # 输出示例:Not After : Mar 6 01:00:53 2026 GMT date1=`cut -c 13-32 <<< $data` echo $date1 # 输出示例:Mar 6 01:00:53 2026
当前无法按照固定字符位置截取内容,因为字符串长度可变:比如日期中的日可能是个位数6,也可能是16这类双位数,日期为动态生成的非固定值。需要一种可以定位冒号前后对应字符并将其删除的方法,最终期望输出为MM DD YYYY格式的日期,示例如下:Mar 6 2026
解决方案
这里提供2种稳定的实现方法:
方法1:awk按字段拆分处理
awk默认按空白字符拆分字段,你需要的月份、日、年份分别对应输出内容的第4、5、7个字段,直接输出对应字段即可,不用关心单/双位数日的空格差异:
echo "$data" | awk '{print $4, $5, $7}'
如果要把格式化后的日期赋值给变量:
formatted_date=$(echo "$data" | awk '{print $4, $5, $7}') echo "$formatted_date" # 输出示例:Mar 6 2026
方法2:sed匹配删除时分秒段
直接匹配数字:数字:数字的时分秒固定格式,连带前后的空格一起删除后提取目标字段:
echo "$data" | sed 's/[0-9]*:[0-9]*:[0-9]* //' | awk '{print $4, $5, $6}'
内容的提问来源于stack exchange,提问作者wiwinut
相关产品推荐
相关产品推荐

