如何用jq筛选IP段修改JSON节点state并输出完整JSON
解决jq修改JSON中指定IP节点state字段的问题
问题分析
你原命令的错误点有三个:
- 正则表达式逻辑错误:
^10.13*中的.是正则通配符(匹配任意单个字符),不是IP里的字面量点;*会匹配3字符0次或多次,不符合匹配10.13开头IP段的需求。 - 命令语法不完整:末尾缺少闭合的单引号,导致Shell无法正确解析jq脚本,触发语法错误。
- 正则未转义字面量点:必须用
\.表示IP地址中的.,才能准确匹配目标段。
正确命令
以下两种方式均可实现需求,执行后将输出重定向到新文件即可:
方式1:基于select的直接赋值
jq '(.[] | select(.node | test("^10\.13"))).state |= "disabled"' data.json > updated_data.json
方式2:基于map的遍历修改(可读性更强)
jq 'map(if .node | test("^10\.13") then .state = "disabled" else . end)' data.json > updated_data.json
效果验证
运行上述命令后,你的示例data.json会被修改为:
[ { "node": "10.13.248.254:61052", "state": "disabled" }, { "node": "10.13.248.255:61052", "state": "disabled" }, { "node": "10.54.247.228:61052", "state": "active" }, { "node": "10.54.247.229:61052", "state": "active" } ]
内容的提问来源于stack exchange,提问作者kaushal47
相关产品推荐
相关产品推荐

