shell脚本jq命令 过滤出指定key的value值包含某个值的所有元素
时间: 2024-12-17 22:38:13 浏览: 14
在shell脚本中,你可以使用`jq`命令过滤出JSON数组中指定键值对(key-value pair)包含特定值的所有元素。假设你有如下的JSON数据存储在一个名为`data.json`的文件里:
```json
[
{
"name": "John",
"age": 25,
"country": "USA"
},
{
"name": "Alice",
"age": 30,
"country": "Canada"
},
{
"name": "Bob",
"age": 28,
"country": "USA"
}
]
```
如果你想要找到所有国家包含"USA"的条目,你可以这样做:
```bash
grep -o '"country":.*"' data.json | jq -r '.[] | select(.["country"] == "USA") | "\(.)"'
```
这里分为两部分:
1. `grep -o '"country":.*"' data.json`:先用`grep`找出所有包含"country": 的行,并提取出来。
2. `jq -r '.[] | select(.["country"] == "USA") | "\(.)"'`:然后使用`jq`筛选出那些`country`字段等于"USA"的元素,`-r`选项让结果保持原始格式。
这将输出匹配的元素:
```json
{
"name": "John",
"age": 25,
"country": "USA"
}
{
"name": "Bob",
"age": 28,
"country": "USA"
}
```
阅读全文