【问题标题】:Remove a portion of a variable length string and store it in a new variable删除可变长度字符串的一部分并将其存储在新变量中
【发布时间】:2021-12-02 08:45:54
【问题描述】:

我正在尝试删除以下示例中的 HH MM(minute) SS 部分:

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

问题是我不能按字符位置,因为文本长度可以改变。例如,日期可以是 16 号而不是 6 号(或任何两位数)。日期将派生,不会是静态的。因此,我需要一种方法来查找“:”之前和之后的字符并删除它们。

我希望输出采用以下格式(MM DD YYYY):

2026 年 3 月 6 日

【问题讨论】:

  • 我不明白...Mar 6 2026的格式不是MM:DD:YY...????
  • 对不起,我没有添加更多代码。它已被更新。如果可能,请删除我的警示。

标签: linux bash macos


【解决方案1】:

比字符串解析更强大的解决方案是使用date -d 读取日期,然后使用+&lt;format&gt; 以您选择的格式将其吐出。 %b %-e %Y 会给你Mar 6 2026,如果你愿意,你可以将其更改为另一种格式。有关格式说明符的列表,请参阅 date --help

$ date -d "$date1" +'%b %-e %Y'
Mar 6 2026

【讨论】:

    【解决方案2】:

    bash:

    data='Not After : Mar 6 01:00:53 2026 GMT'
    read x x x m d x y x <<< $data
    echo "$m $d $y"
    

    输出:

    2026 年 3 月 6 日

    【讨论】:

      猜你喜欢
      • 2019-08-31
      • 1970-01-01
      • 2020-04-26
      • 1970-01-01
      • 2017-11-03
      • 2017-09-27
      • 2016-08-24
      • 2020-03-11
      • 1970-01-01
      相关资源
      最近更新 更多