用一个衬垫将时间戳替换为文件中的当前时间
我有一个包含时间戳的文件:
"buildTimestamp": "2021-07-19T17:00:00Z"
我想使用一行命令将其替换为当前的构建时间。
date | xargs -I {} perl -pi -e 's/2021-07-19T17:00:00Z/"$0"/g' serviceProperties.json
但它没有按预期工作。有什么建议吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您确实应该使用 JSON 解析器来处理 JSON 数据。 jq 可以完成这项工作。
如果您的文件看起来像
然后
在 2022 年 2 月 24 日 16:36:15 America/New_York 输出此内容
如果您不能倡导
jq
至少获取JSON
混合中的 perl 模块:You should really be using a JSON parser to handle JSON data. jq can do this job.
If your file looks like
Then
outputs this on Feb 24, 2022 at 16:36:15 America/New_York
If you can't advocate for
jq
at least get theJSON
perl module in the mix:假设 serviceProperties.json 中的数据
运行后
date +%FT%TZ | xargs -I % perl -pi -e 's/2021-07-19T17:00:00Z/%/g' serviceProperties.json
serviceProperties.json将是
当您替换为 $0 时,它将采用来自 perl 的参数命令,因此你会得到意想不到的结果。相反,使用 xargs 替换为助手就可以解决问题。
要了解有关 xargs 在这种情况下如何工作的更多信息 阅读此处
Assuming data in serviceProperties.json
After running
date +%FT%TZ | xargs -I % perl -pi -e 's/2021-07-19T17:00:00Z/%/g' serviceProperties.json
serviceProperties.json will be
As you are replacing with $0 it will take arguments from perl command and hence you will have unexpected results. Instead replacing with a helper using xargs will do the trick.
To learn more about how xargs is working in this case read here