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

使用RipGrep+Sed批量修改JSON数组末尾的问题求助

批量修改JSON数组末尾元素并插入新内容的sed问题

需求说明

批量递归处理多个JSON文件,找到数组末尾无逗号、以"结尾的元素行(其下一行是]),需要完成三个操作:

  1. 在该元素行末尾添加逗号
  2. 换行插入指定字符串(示例为"inputstring")
  3. 保留]以闭合JSON数组

原命令与核心问题

原执行命令:

cd path/to/folder
rg -l --multiline '(")(\n\])' regex/to/path/to/folders/settings.json | xargs sed -i 's/\("\)\(\n\]\)/\1,\nInputString\n\2/' *.json

导致sed失效的关键原因:sed默认是单行处理模式,无法直接匹配跨换行的"\n]内容;另外命令末尾的*.json属于多余参数,会干扰xargs传递的目标文件列表。

修正后的解决方案

GNU sed(Linux环境)

cd path/to/folder
rg -l --multiline '("\n\])' . | xargs sed -i -e '/"$/{N;s/"\n]/",\n  "inputstring"\n]/}'

BSD sed(macOS环境)

BSD sed的-i选项需要额外传入空参数,命令调整为:

cd path/to/folder
rg -l --multiline '("\n\])' . | xargs sed -i '' -e '/"$/{N;s/"\n]/",\n  "inputstring"\n]/}'

命令解释

  1. rg部分:rg -l --multiline '("\n\])' . 递归查找所有包含"\n]的文件,-l仅输出匹配文件名,--multiline支持多行正则匹配。
  2. sed部分:
    • /\"$/:精准匹配以"结尾的行
    • {N;...}:将下一行(即]所在行)读入sed的模式空间,此时模式空间内容为"data(n)"\n]
    • s/"\n]/",\n "inputstring"\n]/:将匹配内容替换为目标格式,完成逗号添加、新字符串插入的需求

示例验证

原JSON内容:

[
  "data1",
  "data2",
  "data(n)"
]

执行命令后得到期望结果:

[
  "data1",
  "data2",
  "data(n)",
  "inputstring"
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 06:12:04