You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bash的sed结合date命令将JSON日期转为时间戳?

解决Sed替换ISO日期为时间戳时所有结果相同的问题

你遇到的问题核心是Bash命令替换的执行时机:你写的$(date --date=\1 +'%s')会在sed开始处理文本之前就被Bash执行完毕——此时sed还没捕获到任何日期字符串,\1对Bash来说就是普通字符串,date命令处理这个无效输入会返回一个固定的错误时间戳,所以所有替换结果全是同一个值。

下面给你两种可行的解决方案:

方案1:用GNU Sed的e标志执行命令

GNU Sed支持e替换标志,能让替换后的内容作为Shell命令执行,再用执行结果替换原匹配内容。命令调整如下:

echo "$data" | sed -E 's/"([0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}(.[0-9]*Z)?)"/echo "$(date --date=\1 +%s)"/ge'
  • -E:启用扩展正则表达式,不用手动转义括号
  • g:全局替换所有匹配的日期
  • e:把替换后的echo "$(date --date=\1 +%s)"作为Shell命令执行,用date的输出替换原日期字符串

方案2:用JQ处理(更适合JSON数据)

既然是处理JSON格式的OHLC数据,用专门的JSON工具jq会更可靠,避免正则处理JSON的潜在问题。假设你的数据是数组结构,命令如下:

echo "$data" | jq '.[] |= (.t |= (strptime("%Y-%m-%dT%H:%M:%SZ") | mktime))'
  • 如果你的日期字符串不带末尾的Z,把格式字符串改成"%Y-%m-%dT%H:%M:%S"即可
  • .[]:遍历数组中的每一条OHLC记录
  • .t |= ...:把t字段的值替换为解析后的时间戳

内容的提问来源于stack exchange,提问作者MPoorzahed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:30:45