我有下面的data.json要修改,我想根据过滤的IP地址范围(例如“10.13 *”)将状态更改为“禁用”。我尝试了以下命令,我需要得到整个JSON内容作为输出,但我得到了一个语法错误(我已经使用相同的更新单个值(不使用字符Map),它工作得很好。(计划是在shell命令中使用此命令并将输出重定向到新文件)。有人能帮我一下吗
jq '(.[]| select(.node|test("^10.13*"))).state |="disabled" data.json
[
{
"node":"10.13.248.254:61052",
"state": "active"
},
{
"node":"10.13.248.255:61052",
"state": "active"
},
{
"node":"10.54.247.228:61052",
"state": "active"
},
{
"node":"10.54.247.229:61052",
"state": "active"
}
]
2条答案
按热度按时间wb1gzix01#
你的正则表达式不太对。此外,使用
map
使事情变得更简单可能是值得的:或者你可以简单地使用
startswith
。关于后续问题:
如果你的数组位于
{"properties": { "basic": {"nodes_table": _}}}
中的_
,你会写:dbf7pr2w2#
如果你只想修改IP地址以“10.13.”开头的数组元素,你通常会使用
map
并与startswith
合并(用于前缀匹配IP地址):一次分配多个值的等效解决方案:
请注意,第二个解决方案与您提出的方案几乎相同(略有修改:不同的分组、
startswith
和普通赋值运算符)