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

如何使用sed等工具替换4GB JSON文件中ISO日期格式,移除毫秒后缀

大体积JSON文件日期格式替换方案

sed 实现方案(优先推荐)

完全可以通过sed实现需求,你已经完成了正则匹配的核心部分,仅需要通过捕获组提取需要保留的内容即可:

注意:你原正则中的.没有转义,会匹配任意字符,建议转义为\.避免误匹配。

使用扩展正则的易读版本:

sed -E -i.bak 's/([1-9][0-9]{3}-[0-9]{2}-[0-1][0-9]T[0-3][0-9]:[0-9]{2}:[0-9]{2})\.[0-9]{3}Z/\1/g' test.json

参数说明:

  • -E 开启扩展正则支持,不需要对捕获组括号额外加转义符
  • -i.bak 直接修改原文件,同时自动生成原文件备份test.json.bak,避免操作错误丢失数据
  • 捕获组()包裹的是需要保留的到秒级的日期内容,替换时用\1直接引用该部分,自动丢弃后续的毫秒和Z后缀

如果环境不支持扩展正则,可使用基础正则版本:

sed -i.bak 's/\([1-9][0-9]\{3\}-[0-9]\{2\}-[0-1][0-9]T[0-3][0-9]:[0-9]\{2\}:[0-9]\{2\}\)\.[0-9]\{3\}Z/\1/g' test.json

sed为流式处理,不需要将全量文件加载到内存,处理4GB级文件无性能压力。

备选Python实现方案(更严谨)

如果担心JSON中非日期字段命中正则导致误替换,可以使用Python流式处理方案,内存占用极低,适合大文件操作:

import re
import sys

# 预编译正则提升匹配效率
date_pattern = re.compile(r'([1-9]\d{3}-\d{2}-[0-1]\dT[0-3]\d:\d{2}:\d{2})\.\d{3}Z')

def process_large_file(input_path, output_path):
    with open(input_path, 'r', encoding='utf-8') as f_in, open(output_path, 'w', encoding='utf-8') as f_out:
        # 逐行处理,无需加载全量文件到内存
        for line in f_in:
            new_line = date_pattern.sub(r'\1', line)
            f_out.write(new_line)

if __name__ == '__main__':
    if len(sys.argv) != 3:
        print("用法: python replace_date.py input.json output.json")
        sys.exit(1)
    process_large_file(sys.argv[1], sys.argv[2])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:45:06