linux jq命令

举报
yd_212422989 发表于 2026/10/30 09:41:13 2026/10/30
【摘要】 jq是一个轻量级,功能强大的json解析工具,专门用于查询,格式化,修改json数据。 jq命令安装 Centos/RHELyum install -y epel-releaseyum install -y jq Ubuntu/Debianapt updateapt install -y jq Macosbrew install jq 直接二进制安装curl -Lo /usr/local/b...

jq是一个轻量级,功能强大的json解析工具,专门用于查询,格式化,修改json数据。

jq命令安装

Centos/RHEL
yum install -y epel-release
yum install -y jq
Ubuntu/Debian
apt update
apt install -y jq
Macos
brew install jq
直接二进制安装
curl -Lo /usr/local/bin/jq https://github.com/stedolan/jq/releases/latest/download/jq-linux64
chmod +x /usr/local/bin/jq
   

jq基础用法

jq的基础用法是

jq '<过滤表达式>' <JSON 文件或命令输出>
格式化json

如果json 数据没有格式化,可以使用jq使其美观:

echo '{"name":"Alice","age":25,"city":"Shanghai"}' | jq .

输出:

{
  "name": "Alice",
  "age": 25,
  "city": "Shanghai"
}
解析json字段

获取json中的某个字段

echo '{"name":"Alice","age":25}' | jq '.name'

输出

"Alice"
解析嵌套json

如果json结构复杂,可以用.访问嵌套字段

echo '{"person": {"name": "Alice", "age": 25}}' | jq '.person.name'

输出

"Alice"
解析数组

假设json数据如下

{ "users": [ {"name": "Alice", "age": 25}, {"name": "Bob", "age": 30} ] }

提取所有name

echo `{ "users": [ {"name": "Alice", "age": 25}, {"name": "Bob", "age": 30} ] }` | jq .'users[].name'

"Alice" "Bob"

jq 进阶用法

过滤json数据

如下json数据

[ {"name": "Alice", "age": 25}, {"name": "Bob", "age": 30}, {"name": "Charlie", "age": 35} ]

可以筛选大于30的

echo '[ {"name": "Alice", "age": 25}, {"name": "Bob", "age": 30}, {"name": "Charlie", "age": 35} ]' | jq '.[] | select(.age>30)'

{
  "name": "Charlie",
  "age": 35
}
修改json数据

如下

echo '{"name":"Alice","age":25}' | jq '. | {"Username":.name,"age":.age}'

{
  "Username": "Alice",
  "age": 25
}
统计json数组长度
echo '[{"name":"Alice"},{"name":"Bob"}]' | jq 'length'
2

jq在k8s 运维中的应用

在k8s环境中,kubectl 生成的json数据通常很庞大,使用jq可以快速筛选信息

获取节点的pod限制
kubectl get node -o json | jq -r '.items[] | "node:\(.metadata.name)  pod_limit:\(.status.capacity.pods)"'

host:k8s-master01  pod_limit:110
host:k8s-master02  pod_limit:110
host:k8s-master03  pod_limit:110
host:k8s-node01  pod_limit:110
host:k8s-node02  pod_limit:110
获取所有pod的名称
kubectl get pods -A -o json | jq '.items[].metadata.name'
获取指定Namespace的pod
kubectl get pods -n default -o json | jq '.items[].metadata.name'

如果要筛选 正在运行的 Pod:

kubectl get pods -n default -o json | jq '.items[] | select(.status.phase=="Running") | .metadata.name'
统计Running状态的Pod数量
kubectl get pods -A -o json | jq '[.items[] | select(.status.phase=="Running")] | length'
结合sed/awk 进行文本处理
提取格式化json,并输出到文件
kubectl get pods -A -o json | jq '.items[].metadata.name' > pod_list.txt
jq+awk提取k8s资源

获取所有pod名称,并用awk处理

kubect get pods -A -o json | jq -r '.items[].metadata.name' | awk '{print "Pod:"$1}'

总结

操作 命令
安装 jq(CentOS) yum install -y jq
安装 jq(Ubuntu) apt install -y jq
安装 jq(MacOS) brew install jq
格式化 JSON jq .
获取 JSON 字段 jq ‘.name’
筛选 JSON 数据 jq '.[] 统计 JSON 长度 jq 'length' 获取 Kubernetes 节点 Pod 限制 kubectl get nodes -o json
获取所有 Pod 名称 `kubectl get pods -A -o json

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。