Linux指令篇:jq

devtools/2025/3/18 7:49:16/

前言:

        在 Linux 运维和开发过程中,我们经常需要处理 JSON 格式的数据,jq 是一个轻量级、功能强大的 JSON 解析工具,专门用于 查询、格式化、修改 JSON 数据。本文将介绍 jq 的安装、基本用法及实际案例,让你轻松掌握 jq 命令的强大功能。


1. jq 命令安装

1.1 在 Linux 发行版上安装

jq 在大多数 Linux 发行版的软件源中都已包含,可以直接使用包管理器安装。

📌 CentOS / RHEL
yum install -y epel-releaseyum install -y jq
📌 Ubuntu / Debian
apt update apt install -y jq
📌 MacOS(Homebrew)
brew install jq
📌 直接下载二进制文件(适用于所有 Linux 发行版)

如果你的系统没有 jq 的官方软件包,可以手动下载安装:

curl -Lo /usr/local/bin/jq https://github.com/stedolan/jq/releases/latest/download/jq-linux64 chmod +x /usr/local/bin/jq

然后检查是否安装成功:

jq --version

输出示例:

jq-1.6

表示 jq 安装成功。


2. jq 基础用法

jq 的基本用法是:

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

2.1 格式化 JSON

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

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

输出:

{ "name": "Alice", "age": 25, "city": "Shanghai" }

jq . 作用是格式化 JSON,使其更易读。


2.2 解析 JSON 字段

获取 JSON 中的某个字段:

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

输出:

"Alice"

2.3 解析嵌套 JSON

如果 JSON 结构较复杂,可以使用 . 访问嵌套字段:

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

输出:

"Alice"

2.4 解析数组

假设 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"

3. jq 进阶用法

3.1 过滤 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 }

3.2 修改 JSON 数据

假设你想把 name 字段改为 username

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

输出:

{ "username": "Alice", "age": 25 }

3.3 统计 JSON 数组长度

echo '[{"name":"Alice"},{"name":"Bob"}]' | jq 'length'

输出:

2


4. jq 在 Kubernetes 运维中的应用

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

4.1 获取节点的 Pod 限制

kubectl get nodes -o json | jq '.items[].status.capacity.pods'

输出示例:

"110" 
"250"

表示 Kubernetes 的两个节点 max-pods 限制分别是 110 和 250。


4.2 获取所有 Pod 的名称

kubectl get pods -a -o json | jq '.items[].metadata.name'

输出示例:

"nginx-deployment-7c658794b9-lw5z2" "mysql-db-5d74f7b465-w8nlg"

4.3 获取指定 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'

4.4 统计 Running 状态的 Pod 数量

kubectl get pods -A -o json | jq '[.items[] | select(.status.phase=="Running")] | length'

输出示例:

25

表示集群中有 25 个正在运行的 Pod。


5. jq 结合 sed / awk 进行文本处理

5.1 提取并格式化 JSON 并输出到文件

kubectl get pods -a -o json | jq '.items[].metadata.name' > pod_list.txt

然后可以用 cat 查看:

cat pod_list.txt

5.2 jq + awk 提取 Kubernetes 资源

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

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

输出示例:

Pod: nginx-deployment-7c658794b9-lw5z2 Pod: mysql-db-5d74f7b465-w8nlg

6. 总结

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

jq 是 JSON 处理的利器,熟练掌握后,能极大提高 Linux 运维和开发的效率!🚀

如果觉得这篇博客对你有帮助,记得点赞 ⭐、收藏 📌、关注 🚀!


http://www.ppmy.cn/devtools/168021.html

相关文章

w260火锅店管理系统设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

Node.js中SerialPort(串口)模块使用详解

Node.js中SerialPort(串口)模块使用详解 在现代物联网和嵌入式系统中&#xff0c;串口通信作为一种经典且高效的数据传输方式&#xff0c;依然扮演着重要角色。Node.js作为一款强大的JavaScript运行环境&#xff0c;通过SerialPort模块&#xff0c;为我们提供了一套简洁而强大…

大数据 Spark 技术简介

Apache Spark 是一种快速、通用、可扩展的大数据处理引擎&#xff0c;最初由加州大学伯克利分校开发。它提供了一种高效的数据处理框架&#xff0c;可以处理大规模数据集&#xff0c;并在分布式计算集群上进行并行处理。 Apache Spark 的基本概念包括以下几个要点&#xff1a;…

【机器学习chp12】半监督学习(自我训练+协同训练多视角学习+生成模型+半监督SVM+基于图的半监督算法+半监督聚类)

目录 一、半监督学习简介 1、半监督学习的定义和基本思想 2、归纳学习 和 直推学习 &#xff08;1&#xff09;归纳学习 &#xff08;2&#xff09;直推学习 3、半监督学习的作用与优势 4、半监督学习的关键假设 5、半监督学习的应用 6、半监督学习的常见方法 7、半…

CUDA多线程

一、基础 ‌线程块与线程索引‌ CUDA线程以‌线程块&#xff08;Thread Block&#xff09;‌为基本执行单元&#xff0c;每个线程块内包含多个线程&#xff0c;通过threadIdx、blockIdx等内置变量定位线程位置。线程块在GPU上并行执行&#xff0c;同一块内的线程可通过共享内存…

初阶数据结构(C语言实现)——5.3 堆的应用(1)——堆排序

目录 1 堆的应用1.1 堆排序1.1.1 思路1.1.2 代码实现 1.2 建堆的时间复杂度1.2.1 向下调整1.2.1 向上调整1.2.3 结论 学习堆的应用之前&#xff0c;欢迎学习下堆。 这是博主之前的文章&#xff0c;欢迎学习交流 初阶数据结构&#xff08;C语言实现&#xff09;——5.2 二叉树的…

langchain如何并行调用运行接口

文章目录 概要并行化步骤 概要 RunnableParallel 原语本质上是一个字典&#xff0c;其值是运行接口&#xff08;或可以被强制转换为运行接口的事物&#xff0c;如函数&#xff09;。它并行运行所有值&#xff0c;并且每个值都使用 RunnableParallel 的整体输入进行调用。最终返…

RabbitMQ相关的面试题

以下是150道RabbitMQ相关的面试题及简洁回答&#xff1a; RabbitMQ基础概念 1. 什么是RabbitMQ&#xff1f; RabbitMQ是一个开源的AMQP&#xff08;高级消息队列协议&#xff09;实现&#xff0c;用于在分布式系统中进行消息传递和通信。它允许应用程序通过网络发送和接收消息…