如何用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
相关产品推荐
相关产品推荐

