Linux环境下删除JSON文件中指定IP对应的targets完整条目
实现方案
Linux环境下处理结构化JSON数据最成熟的工具是jq,轻量且原生支持JSON结构解析,无需自己写逻辑处理字符串匹配,完全避免格式错乱问题。
1. 安装jq(系统未预装时执行)
- Debian/Ubuntu 系列:
sudo apt update && sudo apt install -y jq - RHEL/CentOS/Fedora 系列:
sudo dnf install -y jq或sudo yum install -y jq
2. 核心处理命令
假设你的原始JSON文件名为targets.json,需要删除的IP为172.17.1.51:
仅输出处理后结果(不修改原文件,适合校验效果)
jq '[.[] | select(.targets[] != "172.17.1.51")]' targets.json
直接修改原文件(兼容所有jq版本的稳妥写法)
jq '[.[] | select(.targets[] != "172.17.1.51")]' targets.json > tmp.json && mv tmp.json targets.json
3. 参数化写法(适合嵌入脚本动态调用)
如果需要把待删除IP作为变量传入,使用--arg参数避免引号嵌套问题:
# 定义要删除的IP变量 DEL_IP="172.17.1.51" # 执行过滤并修改原文件 jq --arg target_ip "$DEL_IP" '[.[] | select(.targets[] != $target_ip)]' targets.json > tmp.json && mv tmp.json targets.json
命令逻辑说明
- 外层
[]表示将过滤后的结果重新组装为数组,和原始格式保持一致 .[]遍历原始JSON顶层数组的每一条数据select(.targets[] != "待删除IP")是过滤规则:只要当前条目的targets数组包含待删除IP,就直接排除该整条数据,完全匹配你的需求
内容的提问来源于stack exchange,提问作者user13539846
相关产品推荐
相关产品推荐

