用一个衬垫将时间戳替换为文件中的当前时间

use*_*178 0 shell perl json

我有一个包含时间戳的文件:

"buildTimestamp": "2021-07-19T17:00:00Z"
Run Code Online (Sandbox Code Playgroud)

我想使用一行命令将其替换为当前的构建时间。

date | xargs -I {} perl -pi -e 's/2021-07-19T17:00:00Z/"$0"/g' serviceProperties.json 
Run Code Online (Sandbox Code Playgroud)

但它没有按预期工作。有什么建议么?

gle*_*man 6

您确实应该使用 JSON 解析器来处理 JSON 数据。可以做这个工作。

如果你的文件看起来像

{
  "foo": {
    "bar": {
      "buildTimestamp": "2021-07-19T17:00:00Z"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

然后

jq '.foo.bar.buildTimestamp = (now | strftime("%FT%TZ"))' serviceProperties.json
Run Code Online (Sandbox Code Playgroud)

于 2022 年 2 月 24 日 16:36:15 America/New_York 输出此内容

{
  "foo": {
    "bar": {
      "buildTimestamp": "2022-02-24T21:36:15Z"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

如果你不能提倡至少jq将JSONperl 模块加入其中:

perl -MJSON -MPOSIX=strftime -0777 -nE '
    $json = JSON->new();
    $data = $json->decode($_);
    $data->{foo}{bar}{buildTimestamp} = strftime("%FT%TZ", gmtime);
    say $json->pretty->encode($data);
' serviceProperties.json
Run Code Online (Sandbox Code Playgroud)
{
   "foo" : {
      "bar" : {
         "buildTimestamp" : "2022-02-25T14:41:04Z"
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

  • 冒着听起来冷酷无情的风险:添加它。将正确的工具放入您的工具箱中。 (5认同)