如何从JSON文件中grep提取值:获取汽车类型、产地、品牌对应字段
处理结构化JSON数据推荐使用专门的JSON处理工具jq,不要用普通grep做模糊匹配,避免匹配到非目标字段的内容。
第一步:安装jq
- Debian/Ubuntu 系统:
sudo apt install jq - CentOS/RHEL 系统:
sudo yum install jq - macOS 系统:
brew install jq
假设你的JSON文件保存为car.json,以下是三个需求的对应操作:
1. 列出所有汽车类型(gas/electric)
执行命令:
jq -r '.[].Cars | keys[]' car.json | sort -u
输出结果:
electric gas
说明:-r参数输出无引号的原始字符串,keys[]提取对象的所有键值,sort -u对结果去重。如果需要指定仅查询某个州的数据,可以添加筛选条件,比如只查询纽约的汽车类型:jq -r '.[] | select(.State == "New York") | .Cars | keys[]' car.json
2. 指定汽车类型后,列出对应生产地分类
比如你已经选定类型为gas,执行命令:
jq -r '.[].Cars.gas | keys[]' car.json | sort -u
输出结果:
OutsideUS USAMade
如果要查询electric类型的生产地,只需要把命令里的gas替换为electric即可。
3. 指定类型和生产地后,列出对应汽车品牌
比如你选定类型为gas、生产地为USAMade,执行命令:
jq -r '.[].Cars.gas.USAMade | keys[]' car.json | sort -u
输出结果:
Ford
如果要查询electric类型、OutsideUS生产地的品牌,把路径替换为.Cars.electric.OutsideUS即可。
注意:如果坚持要用grep做临时快速查询,可以用
grep -o '"gas"\|"electric"' car.json | sort -u这类命令实现,但该方法是基于文本模糊匹配,若JSON其他字段值包含目标字符串会出现误匹配,不推荐正式场景使用。
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

