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

如何在jq中一次性设置多个路径值?支持通配符模式吗?

使用jq批量修改package.json中匹配通配符的依赖项

当然支持!jq 完全能搞定这种批量修改的需求,而且实现起来很灵活。针对你要批量更新dependencies下所有以acme-开头的依赖版本的场景,我们可以用with_entries配合筛选函数来实现,具体看下面的方法:

方法1:用startswith筛选前缀匹配的依赖

这是最直观的方式,专门针对“以某个字符串开头”的场景:

cat package.json | jq '.dependencies |= with_entries(select(.key | startswith("acme-")) | .value = "mytagname")'

命令解释:

  • .dependencies |=:把dependencies对象作为后续操作的目标,修改后会替换原对象
  • with_entries:遍历对象的键值对(把对象转换成[{key: "...", value: "..."}]的数组,处理后再转回对象)
  • select(.key | startswith("acme-")):筛选出键名以acme-开头的依赖项
  • .value = "mytagname":把筛选出的依赖项的值设置为你想要的标签

方法2:用正则表达式test实现更灵活的匹配

如果需要更复杂的匹配规则(比如包含特定模式、或者非严格前缀的情况),可以用正则表达式:

cat package.json | jq '.dependencies |= with_entries(select(.key | test("^acme-")) | .value = "mytagname")'

这里的"^acme-"是正则表达式,^表示匹配字符串开头,效果和startswith一致;如果要匹配包含acme-的任意键,去掉^即可。

直接修改原文件的技巧

上面的命令会把修改后的内容输出到终端,如果要直接覆盖原文件,可以借助sponge工具(需要先安装moreutils包):

cat package.json | jq '.dependencies |= with_entries(select(.key | startswith("acme-")) | .value = "mytagname")' | sponge package.json

注意:修改前建议备份原文件,避免意外情况导致数据丢失。

为什么不用setpath?

你之前用的setpath适合修改单个明确路径的节点,但批量修改需要先筛选出符合条件的键,再统一设置值,with_entries的方式更适合这种场景。不过如果一定要用setpath,也可以先收集所有匹配的路径,再逐个设置,但写法会繁琐很多,上面的方法更简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:25:06