jq 是一个强大的命令行工具,以其简洁的语法和丰富的功能,成为处理JSON数据的首选。本文旨在通过实战示例,让你迅速上手jq,掌握提取信息、美化输出和数据压缩的核心技能。
一、安装jq:开启高效之旅
首先,确保你的系统中安装了jq。在大多数Linux发行版中,可以通过包管理器安装,例如:
# Ubuntu/Debian
sudo apt-get install jq
# CentOS/RHEL
sudo yum install epel-release
sudo yum install jq
# macOS (使用Homebrew)
brew install jq
安装记录,如下:
[root@localhost lyj]# yum install epel-release
Loaded plugins: fastestmirror, langpacks
Existing lock /var/run/yum.pid: another copy is running as pid 2658.
Another app is currently holding the yum lock; waiting for it to exit...
The other application is: PackageKit
Memory : 269 M RSS (696 MB VSZ)
Started: Wed Jun 12 07:00:02 2024 - 00:54 ago
State : Sleeping, pid: 2658
Another app is currently holding the yum lock; waiting for it to exit...
The other application is: PackageKit
Memory : 269 M RSS (696 MB VSZ)
Started: Wed Jun 12 07:00:02 2024 - 00:56 ago
State : Sleeping, pid: 2658
Another app is currently holding the yum lock; waiting for it to exit...
The other application is: PackageKit
Memory : 269 M RSS (696 MB VSZ)
Started: Wed Jun 12 07:00:02 2024 - 00:58 ago
State : Sleeping, pid: 2658
....
俺也不知道咋回事,第一次遇到。
没事问AI。
AI:
看起来`yum`软件包管理器上有另一个应用程序(`PackageKit`)造成的锁定。消息表明`PackageKit`当前持有`yum`锁,阻止其他`yum`进程运行,直到释放锁。
要解决此问题,您可以尝试以下步骤:
1. **等待锁定释放**:消息显示`PackageKit`已经运行了一段时间。您可以等一段时间,看看是否锁会自动释放。
2. **终止进程**:如果等待不起作用,您可以尝试终止持有锁的`PackageKit`进程。您可以使用以下命令查找`PackageKit`进程的PID,然后将其终止:
```bash
ps -aux | grep PackageKit
```
这条命令会显示`PackageKit`进程的PID。然后,您可以使用以下命令将其终止:
```bash
sudo kill -9 <PID>
```
将`<PID>`替换为`PackageKit`进程的实际PID。
3. **删除锁文件**:如果终止进程不起作用,您可以手动删除锁文件。锁文件通常位于`/var/run/yum.pid`。您可以使用以下命令删除它:
```bash
sudo rm -f /var/run/yum.pid
```
执行这些步骤后,您应该能够使用`yum`安装`jq`而无任何问题。
新问题又来了:
[root@localhost lyj]# yum install epel-release
Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
epel/x86_64/metalink | 14 kB 00:00:00
* base: mirrors.ustc.edu.cn
* centos-sclo-rh: mirrors.ustc.edu.cn
* centos-sclo-sclo: mirrors.ustc.edu.cn
* epel: mirrors.ustc.edu.cn
* extras: mirrors.ustc.edu.cn
* updates: mirrors.ustc.edu.cn
base | 3.6 kB 00:00:00
centos-sclo-rh | 3.0 kB 00:00:00
centos-sclo-sclo | 3.0 kB 00:00:00
epel | 4.3 kB 00:00:00
extras | 2.9 kB 00:00:00
https://dlm.mariadb.com/repo/mariadb-server/11.3/yum/rhel/7/x86_64/repodata/repomd.xml: [Errno 14] curl#7 - "Failed to connect to 2606:4700::6812:8718: Network is unreachable"
Trying other mirror.
https://dlm.mariadb.com/repo/mariadb-server/11.3/yum/rhel/7/x86_64/repodata/repomd.xml: [Errno 12] Timeout on https://dlm.mariadb.com/repo/mariadb-server/11.3/yum/rhel/7/x86_64/repodata/repomd.xml: (28, 'Operation timed out after 30002 milliseconds with 0 out of 0 bytes received')
Trying other mirror.
感觉要换源❗❗❗
❗注意
由于 jq 可能不包含在默认的CentOS仓库中,所以需要安装EPEL(Extra Packages for Enterprise Linux)存储库以获取jq的软件包。
二、提取特定信息:直击核心数据
假设我们有一个名为data.json的文件,内容如下:
{
"users": [
{"name": "ZhangSan", "age": 25},
{"name": "LiSi", "age": 30}
]
}
如果我们想要提取所有用户的名字,可以使用以下 jq 命令:
cat data.json | jq '.users[].name'
# 或者
jq '.users[].name' data.json
小贴士:在 jq 的上下文中,'.
' 是一个特殊的表达式,它表示JSON数据的根对象。
执行上述命令后,会得到以下输出:
"ZhangSan"
"LiSi"
这表明我们已成功提取了所有用户的名字。
三、格式化JSON:清晰查看JSON结构
当JSON数据被压缩或编码为单行时,它可能很难阅读。jq 的默认行为是输出格式化的JSON。对于data.json,可以使用以下命令进行格式化:
jq '.' data.json
#或者
cat data.json | jq
执行后,你会看到JSON数据被格式化为多行,每个属性都单独占一行,这使得数据更易于阅读和理解:
{
"users": [
{
"name": "ZhangSan",
"age": 25
},
{
"name": "LiSi",
"age": 30
}
]
}
四、紧凑化JSON:优化存储与传输
我们通常需要删除不必要的空格和换行符以节省存储空间或加快传输速度。jq 也提供了一个 -c
选项,可以将JSON输出为紧凑格式。这有助于减少文件大小,使其更适合某些场景。
使用以下命令可以将JSON数据紧凑化:
jq -c '.' data.json
执行后,你会看到JSON数据被输出为单行格式,没有多余的空格和换行符。这种格式虽然不易读,但占用的空间更小,便于网络传输。
总结
通过这些实例,你已经掌握了 jq 在日常开发中的基本应用。
然而,jq 的潜力远不止于此,它拥有极其丰富的功能集,能够轻松应对各种复杂的数据处理和分析场景。未来我将继续分享 jq 的更多高级用法和技巧。
标签:00,PackageKit,mirrors,jq,JSON,yum,Linux From: https://www.cnblogs.com/o-O-oO/p/18242980原创 1024夜谭