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

如何用sed/awk/tr处理大体积伪JSON文件替换换行符添加逗号

解决方案

问题原因

你之前的sed命令不生效是因为sed默认逐行读取内容到模式空间,模式空间中默认不包含行尾的换行符,所以直接匹配\n无法命中目标组合。

方案1:GNU sed 低内存占用方案(推荐,适合20GB大文件)

这个方案不会一次性加载整个文件,仅逐行处理,内存占用极低:

sed '/^[[:space:]]*}[[:space:]]*$/{N;s/}\n{/},\n{/}' test.json

命令说明

  • 首先匹配仅包含闭合大括号(允许前后有空白字符)的行:/^[[:space:]]*}[[:space:]]*$/
  • 匹配到后执行N命令,将下一行内容追加到当前模式空间,此时模式空间内会包含两行内容和中间的换行符
  • 执行替换逻辑,将}\n{替换为},\n{,完成加逗号的需求
    如果你的源文件中}和{前后完全没有空白字符,可以把正则简化为/^}$/。因为最后一个闭合大括号后没有下一行内容,N命令执行失败会直接输出原内容,刚好满足最后一个大括号不加逗号的要求。

方案2:awk 兼容方案

如果需要更高的兼容性,可以用awk实现,同样是逐行处理,内存占用低:

awk '{if(prev ~ /^[[:space:]]*}[[:space:]]*$/ && $0 ~ /^[[:space:]]*{[[:space:]]*$/) print prev","; else if (prev != "") print prev; prev=$0} END{print prev}' test.json

命令说明

  • 缓存上一行的内容,每次读取新行时判断:如果上一行是单独的闭合大括号、当前行是单独的起始大括号,就输出上一行加逗号
  • 其余情况正常输出上一行,最后输出缓存的最后一行内容,避免最后一个闭合大括号后多加逗号

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:30:01