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
相关产品推荐
相关产品推荐

