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

如何用jq结合正则替换JSON指定对象的name与rootPath字段

问题:修改JSON中指定对象的name和rootPath字段

原始JSON数据:

[
  {
    "name": "architecture-design-detailed",
    "rootPath": "/media/ismail/architecture-design-detailed/_Working/_NotesFiltered/_software/architecture-design-detailed",
    "paths": [],
    "group": "",
    "enabled": true
  },
  {
    "name": "architecture-design-detailed-engineering",
    "rootPath": "/media/ismail/architecture-design-detailed/_Working/_NotesFiltered/_software/architecture-design-detailed-engineering",
    "paths": [],
    "group": "",
    "enabled": true
  }
]

需求:当name字段值为architecture-design-detailed时:

  • 将name字段修改为new_name_here
  • 将rootPath字段中最后一个斜杠后的部分替换为new_name_here

现有jq命令(仅完成name字段修改):

jq 'map(if .name == "architecture-design-detailed" then .name = "new_name_here" else . end)'

解决方法

可以通过sub函数匹配rootPath末尾的路径段并替换,结合字段赋值完成两项修改。完整的jq命令如下:

jq 'map(
  if .name == "architecture-design-detailed" then
    .name = "new_name_here" |
    .rootPath |= sub("/[^/]+$"; "/new_name_here")
  else
    .
  end
)'

命令说明:

  • | 用于串联操作,先修改name字段,再处理rootPath
  • |= 是更新运算符,专门针对rootPath字段执行后续替换操作
  • sub("/[^/]+$"; "/new_name_here"):
    • 正则表达式/[^/]+$匹配最后一个斜杠及其后的所有非斜杠字符($锚定字符串结尾)
    • 替换为/new_name_here,实现最后一段路径的替换

执行后得到预期输出:

[
  {
    "name": "new_name_here",
    "rootPath": "/media/ismail/architecture-design-detailed/_Working/_NotesFiltered/_software/new_name_here",
    "paths": [],
    "group": "",
    "enabled": true
  },
  {
    "name": "architecture-design-detailed-engineering",
    "rootPath": "/media/ismail/architecture-design-detailed/_Working/_NotesFiltered/_software/architecture-design-detailed-engineering",
    "paths": [],
    "group": "",
    "enabled": true
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:43:15