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

Mac下如何用sed为分行的JSON对象大括号间添加逗号?

问题解决:sed无法匹配跨行}\n{的原因及修复方案

核心问题

sed默认是逐行处理输入内容的,每次仅将一行加载到模式空间中,因此你写的}\n{这种包含换行符的跨行模式,sed根本无法识别——它看不到当前行之外的换行符和下一行的{。

解决办法

方法1:用sed的N命令合并两行处理

通过N命令将下一行读入模式空间,让跨行的}\n{处于同一处理单元中,命令如下:

sed 'N; s/}\n{/},\n{/; P; D' file.json > file.json.tmp
  • N:将下一行追加到当前模式空间,使跨行内容处于同一处理环境
  • s/}\n{/},\n{/:执行目标替换
  • P:打印模式空间中换行符之前的内容
  • D:删除模式空间中换行符之前的内容,剩余内容进入下一轮循环,避免漏匹配连续的JSON对象

方法2:用awk处理(更简洁)

awk对跨行场景的处理逻辑更灵活,命令如下:

awk 'NR>1 && /^{/ {print ","} 1' file.json > file.json.tmp
  • NR>1 && /^{/:判断当前行不是第一行且以{开头时,先打印一个逗号
  • 1:awk的简写语法,代表打印当前行

额外排查点:换行符格式

如果上述方法仍无效,可能你的文件是Windows格式(换行符为\r\n而非Unix的\n),可先转成Unix格式再处理:

dos2unix file.json

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 09:35:00