我需要从json输出中替换部分值,我可以使用sed -i轻松地执行此操作但是它也会替换文件的其他部分我不想要它,除非我遗漏了一些东西。输出是
{
"LastModified": "2018-03-07T17:24:33.000Z",
"Key": "pending/archive/f7ab1684-e94d-483e-ace1-560367c1196c_1000_s.json"
}
我需要将LastModified值上的短划线“ - ”替换为斜线,然后删除一些东西,就像“T”和“.000Z”那样我最终可以将时间戳转换为纪元。
我尝试过使用 猫清单| jq -r'。[] | select(.LastModified ==“ - ”)。LastModified =“/”' 和| =运算符,但我无法在网络上的任何其他地方找到这个已完成。
答案 0 :(得分:0)
使用 jq 的sub()
和fromdate()
功能:
jq '.LastModified |= (sub("\\.000Z";"Z") | fromdate)' input.json
输出:
{
"LastModified": 1520443473,
"Key": "pending/archive/f7ab1684-e94d-483e-ace1-560367c1196c_1000_s.json"
}
答案 1 :(得分:0)
如果您的平台支持它,您可以使用日期函数进行解析,然后重新格式化日期字符串。
.LastModified |= (sub("\\.000Z$"; "Z") | fromdateiso8601 | strftime("%Y/%m/%d %H:%M:%S"))
否则,您可以使用通常的字符串操作技术。
.LastModified |= "\(.[:10] | sub("-"; "/"; "g")) \(.[11:19])"
两者都会产生结果:
{
"LastModified": "2018/03/07 17:24:33",
"Key": "pending/archive/f7ab1684-e94d-483e-ace1-560367c1196c_1000_s.json"
}