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

如何用JQ替换数组中符合正则的元素并保留原数组结构?

用jq修改数组指定元素并返回完整数组

需求说明

  • 原始JSON数组:["arn:123456:layer:my-layer:5", "arn:123456:layer:their-layer:1"]
  • 匹配规则:通过正则.*my-layer.*定位目标元素
  • 修改要求:将匹配到的"arn:123456:layer:my-layer:5"替换为"arn:123456:layer:my-layer:8"
  • 现存问题:原命令cat a.json | jq '.[] | (select(test(".*my-layer.*")) | sub(":5";":8";"i"))仅输出修改后的单个元素,无法得到完整数组

解决方案

使用map()函数遍历数组,对符合条件的元素执行替换,其余元素保留原样:

cat a.json | jq 'map(if test(".*my-layer.*") then sub(":5";":8";"i") else . end)'

命令解释

  • map():遍历数组的每一个元素,对每个元素应用后续逻辑
  • if test(".*my-layer.*") then ... else . end:判断当前元素是否匹配指定正则,匹配则执行sub()替换,不匹配则直接返回原元素(.代表当前元素)

执行结果

运行命令后会输出修改后的完整数组:

[
  "arn:123456:layer:my-layer:8",
  "arn:123456:layer:their-layer:1"
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:13:08