文章目录
1.jq命令是什么
官网下载:
jq可以对json数据进行切片、过滤、映射和转换。 与 sed、awk、grep 和其他命令一样,它可以让您轻松地处理文本。 它可以轻松地将您拥有的数据转换为您期望的格式,并且您需要编写的程序通常比您期望的更简洁。
jq 是用 C 编写的,没有运行时依赖性,因此它几乎可以在任何系统上运行。 预编译的二进制补码文件可以直接在Linux、OSX和Windows系统上运行。 事实上php格式化字符串,你需要授予它在linux和OSX系统中的可执行权限; 也可以在linux系统中直接用yum安装。
jq常用于从json中解析过滤出想要的属性值,格式化json字符串输出。
1.jq安装
centosyum 安装
yum install jq
Ubuntu可以直接用apt安装
sudo apt-get install jq
2、jq命令的格式
jq [选项] 过滤器 [文件]
选项:
–version:输出jq版本信息并退出
–slurp/-s:将整个输入流读入链表。
--raw-input/-R:不解析为JSON,将每一行的文本作为字符串输出到屏幕。
--null-input/-n:不读取任何输入,过滤器以 null 作为输入运行。 通常用于从头开始创建 JSON 数据。
--compact-output/-c:使输出紧凑php格式化字符串,而不是在一行上输出每个 JSON 对象。
--color-output/-C: 打开彩色显示
--monochrome-output/-M: 关闭彩色显示
–ascii-output/-a:指定输出格式为ASCII
–raw-output/-r:如果过滤结果是字符串,则直接进入标准输出(去掉字符串中的破折号)
筛选:
.: 默认输出
.foo:输出指定的属性,foo代表属性。
.[foo]:输出指定的链表元素。 foo 代表字段下标。
.[]:输出指定字段中的所有元素
,:指定多个属性作为过滤条件时,用冒号分隔
|:使用指定链表元素中的属性作为过滤条件
文件:
JOSN 格式文件。
从 json 文件的对象字段中提取一组特定属性的值
例子:
从 json 文件对象字段获取一组特定属性的值。
[root@VM_0_14_centos ~]# jq -r '.[].rustc_target_feature' < "./rustc-target-features-optimized.json"
+adx
+sha
+sse2
+avx2
+avx
+sse4.2
+sse4.1
[root@VM_0_14_centos ~]#
rustc-target-features-optimized.json 文件内容:
[
{
"rustc_target_feature": "+adx",
"check_cpu_for_feature": "adx"
},
{
"rustc_target_feature": "+sha",
"check_cpu_for_feature": null
},
{
"rustc_target_feature": "+sse2",
"check_cpu_for_feature": "sse2"
},
{
"rustc_target_feature": "+avx2",
"check_cpu_for_feature": "avx2"
},
{
"rustc_target_feature": "+avx",
"check_cpu_for_feature": "avx"
},
{
"rustc_target_feature": "+sse4.2",
"check_cpu_for_feature": "sse4_2"
},
{
"rustc_target_feature": "+sse4.1",
"check_cpu_for_feature": "sse4_1"
}
]
在shell脚本中,我们可以将执行结果复制到变量中。 例如:
optimized_release_rustc_target_features=$(jq -r '.[].rustc_target_feature' < "./rustc-target-features-optimized.json")
它的结果如下,就是你的jq执行结果字符串,用单冒号括起来。
optimized_release_rustc_target_features='+adx
+sha
+sse2
+avx2
+avx
sse4.2
+sse4.1'
从json文件的object字段中提取特定属性集的值,并排除空值
示例:从json文件的object字段中取出一组特定的属性值,并排除为null的值
如下,json还是刚才的json文件。 我们这次取了check_cpu_for_feature属性的值,并通过|select(.!=null)'排除了一个空值。
cpu_features_required_for_optimized_release=$(jq -r '.[].check_cpu_for_feature | select(. != null)' < "./rustc-target-features-optimized.json")
结果如下:
cpu_features_required_for_optimized_release='adx
sse2
avx2
avx
sse4_2
sse4_1'
以低格式输出json字符串
[root@VM_0_14_centos ~]# echo '{"name":"she","age":20}' |jq
{
"name": "she",
"age": 20
}
[root@VM_0_14_centos ~]#