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

如何用jq1.6通过变量更新含多域名键的JSON的config2字段

解决方案

正确的变量主机名引用语法

当用变量作为JSON对象的键名时,必须使用括号索引的方式访问,正确命令如下:

jq --arg a "1" --arg b "host1.reg.fqdn.com" '.host_config[$b].config2 = $a' sample.json

核心要点:

  • .host_config[$b]:通过变量$b的实际值作为键,精准定位到目标主机的配置对象
  • 直接赋值= $a即可完成config2字段的更新

优化的批量更新方案

方案1:循环修改原文件

如果要批量更新并覆盖原文件,注意不能直接重定向到原文件(会清空文件),需借助临时文件:

for i in {1..3}; do
  jq --arg idx "$i" --arg host "host${i}.reg.fqdn.com" '.host_config[$host].config2 = $idx' sample.json > temp.json && mv temp.json sample.json
done

方案2:单jq命令批量处理(无需循环)

利用jq的内置遍历能力,一次命令完成所有符合规则的主机更新:

jq '.host_config |= (to_entries | map(
    if .key | test("host\\d+\\.reg\\.fqdn\\.com") then .value.config2 = (.key | split(".")[0] | ltrimstr("host")) else . end
) | from_entries)' sample.json

该命令会自动识别所有hostX.reg.fqdn.com格式的主机,将其config2设置为对应的序号X。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 14:47:04