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

如何用sed替换-green对应的Weight值?附jq使用问题求助

解决JSON中-green目标组Weight值的修改问题

一、sed方案(不推荐用于JSON)

如果一定要用sed实现,需要通过捕获组保留匹配到的-green后续字符,替换命令如下:

sed 's/\(-green\/[^"]*\)", "Weight": [0-9]*/\1", "Weight": 自定义数值/' 你的文件名
  • 说明:\(-green\/[^"]*\) 捕获-green/到下一个双引号之间的所有内容,替换时用\1引用这部分内容,确保原有TargetGroupArn不变,仅修改Weight值。
  • 注意:sed是基于文本匹配的工具,JSON结构若存在换行、空格变化,很容易匹配失败,不建议用于处理JSON。

二、jq方案(推荐,精准处理JSON)

你之前的jq命令只输出修改后的条目,是因为使用|过滤后破坏了原有JSON结构。正确的写法是在原结构内完成更新,保留完整JSON:

1. 基础修改命令(保留完整结构)

jq '.[].ForwardConfig.TargetGroups |= map(if .TargetGroupArn | contains("-green") then .Weight = 555 else . end)' input.json
  • 逻辑:遍历顶层数组的每个元素,更新其ForwardConfig.TargetGroups数组——对数组内每个对象,判断TargetGroupArn是否包含-green,是则修改Weight为指定值(这里是555),否则保持原样。

2. 实现原地编辑

jq没有原生原地编辑功能,可通过临时文件或工具实现:

  • 方法一:用临时文件中转
jq '.[].ForwardConfig.TargetGroups |= map(if .TargetGroupArn | contains("-green") then .Weight = 555 else . end)' input.json > temp.json && mv temp.json input.json
  • 方法二:用sponge工具(需先安装moreutils包)
jq '.[].ForwardConfig.TargetGroups |= map(if .TargetGroupArn | contains("-green") then .Weight = 555 else . end)' input.json | sponge input.json

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 01:10:57