最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux jq命令的使用解讀

 更新時間:2025年11月11日 10:35:18   作者:fengyehongWorld  
jq 是一個強大的命令行工具,用于處理 JSON 數(shù)據(jù),它可以用來查看、過濾、修改、格式化 JSON 數(shù)據(jù),通過使用各種選項和過濾器,可以實現(xiàn)復(fù)雜的 JSON 處理任務(wù)

一. 簡介

jq 是 Linux 中的命令行工具,用于處理 JSON 數(shù)據(jù)。

你可以把它看作是 JSON 的 sed 或 awk,可以用來查看、過濾、修改、格式化 JSON 數(shù)據(jù)。

  • GitHub 地址https://github.com/stedolan/jq
  • jq 官方網(wǎng)站https://stedolan.github.io/jq/
option解釋
-r輸出原始格式,而不是 JSON 編碼 ⇒ 去掉字段帶的"雙引號
-R把輸入當作原始字符串處理(Raw Input),而不是默認的 JSON 結(jié)構(gòu)。
-c將內(nèi)容壓縮到一行輸出。
-s將輸入視為多個 JSON 對象,用于處理多個 JSON 對象的數(shù)組。
filter解釋
.表示當前對象,用于訪問字段或?qū)傩浴?/td>
.fieldName選擇指定字段的值。
[]用于遍歷數(shù)組元素。
select(condition)根據(jù)條件選擇元素。
map(transform)對數(shù)組中的每個元素應(yīng)用轉(zhuǎn)換操作。
格式轉(zhuǎn)換解釋
@csv輸出 CSV 格式(數(shù)組)
@tsv輸出 Tab 分隔格式
@json把值轉(zhuǎn)成 JSON 字符串

二. 選項

2.1.

默認的格式化輸出

apluser@FengYeHong-HP:~$ echo -n '{"id":1, "name":"zhangsan", "score":[75, 85, 90]}' | jq .
{
  "id": 1,
  "name": "zhangsan",
  "score": [
    75,
    85,
    90
  ]
}

2.2-c

-c選項將內(nèi)容壓縮到一行輸出

apluser@FengYeHong-HP:~$ cat data2.json
{
  "id": 1,
  "name": "zhangsan",
  "score": [
    75,
    85,
    90
  ]
}
apluser@FengYeHong-HP:~$ cat data2.json | jq -c
{"id":1,"name":"zhangsan","score":[75,85,90]}

2.3-r

-r選項可以去掉字段兩旁的"

apluser@FengYeHong-HP:~$ echo -n '{"id":1, "name":"zhangsan", "score":[75, 85, 90]}' | \
jq '.name' -r
zhangsan

2.4-R

  • 把輸入當作原始字符串處理(Raw Input),而不是默認的 JSON 結(jié)構(gòu)。
  • sed 's/"//g':將csv中的"給替換為空。
  • jq -R '[splits(",")]':將逗號分隔的文本行轉(zhuǎn)成數(shù)組。
apluser@FengYeHong-HP:~$ cat data.txt
"id","name","age","score"
"1","zhangsan","17","75"
"2","lisi","16","80"
"3","wangwu","18","85"
"4","zhaoliu","18","90"
apluser@FengYeHong-HP:~$ awk 'NR > 1' data.txt | sed 's/"http://g' | jq -R '[splits(",")]'
[
  "1",
  "zhangsan",
  "17",
  "75"
]
[
  "2",
  "lisi",
  "16",
  "80"
]
[
  "3",
  "wangwu",
  "18",
  "85"
]
[
  "4",
  "zhaoliu",
  "18",
  "90"
]

三. 字段提取

3.1 普通字段

提取單個字段

apluser@FengYeHong-HP:~$ echo -n '{"id":1, "name":"zhangsan", "score":[75, 85, 90]}' | \
> jq '.name'
"zhangsan"

提取多個字段

apluser@FengYeHong-HP:~$ echo -n '{"id":1, "name":"zhangsan", "score":[75, 85, 90]}' | \
jq '.id, .name'
1
"zhangsan"

提取嵌套字段

apluser@FengYeHong-HP:~$ cat data3.json
{
  "name": "Alice",
  "age": 26,
  "city": "New York",
  "info": {
    "sub_id": 10,
    "sub_address": "地球",
    "sub_num_list": [100, 200, 300]
  }
}
apluser@FengYeHong-HP:~$ cat data3.json | jq '.info.sub_address'
"地球"
# | 的管道符起到過濾作用
apluser@FengYeHong-HP:~$ cat data3.json | jq '.info | .sub_address'
"地球"

3.2 數(shù)組字段

提取數(shù)組字段中的指定元素,支持切片提取(類似于python的list語法)

apluser@FengYeHong-HP:~$ cat data3.json | jq '.info.sub_num_list[0]'
100
apluser@FengYeHong-HP:~$ cat data3.json | jq '.info.sub_num_list[1]'
200
apluser@FengYeHong-HP:~$ cat data3.json | jq '.info.sub_num_list[2]'
300
apluser@FengYeHong-HP:~$ cat data3.json | jq '.info.sub_num_list[0:2]'
[
  100,
  200
]

數(shù)組字段中的對象屬性

apluser@FengYeHong-HP:~$ echo '{"items":[{"item_id":1,"name":"すてきな雑貨","price":2500},{"item_id":2,"name":"格好いい置物","price":4500}]}' | \
jq '.items[].name'
"すてきな雑貨"
"格好いい置物"
apluser@FengYeHong-HP:~$ cat data1.json
[
  {
    "name": "Alice",
    "age": 25,
    "city": "New York"
  },
  {
    "name": "Bob",
    "age": 30,
    "city": "Los Angeles"
  },
  {
    "name": "Charlie",
    "age": 22,
    "city": "Chicago"
  }
]
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ cat data1.json | jq '.[] | .age'
25
30
22
apluser@FengYeHong-HP:~$ cat data1.json | jq '.[].age'
25
30
22

數(shù)組展開

apluser@FengYeHong-HP:~$ echo -n '[75, 85, 90]' | jq '.[]'
75
85
90

四. 編輯

4.1 字段更新

更新一個字段

apluser@FengYeHong-HP:~$ echo -n '{"name":"Alice","age":25,"city":"New York"}' | jq '.name = "賈飛天"'
{
  "name": "賈飛天",
  "age": 25,
  "city": "New York"
}

更新多個字段

apluser@FengYeHong-HP:~$ echo -n '{"name":"Alice","age":25,"city":"New York"}' | jq '. += {"name":"賈飛天", "age":26}'
{
  "name": "賈飛天",
  "age": 26,
  "city": "New York"
}

4.2 字段追加

追加一個字段

apluser@FengYeHong-HP:~$ echo -n '{"name":"Alice","age":25,"city":"New York"}' | jq '.country = "USA"'
{
  "name": "Alice",
  "age": 25,
  "city": "New York",
  "country": "USA"
}

追加一個字段的同時,修改既存的字段

apluser@FengYeHong-HP:~$ echo -n '{"name":"Alice","age":25,"city":"New York"}' | jq '.country = "USA" | .age = 50'
{
  "name": "Alice",
  "age": 50,
  "city": "New York",
  "country": "USA"
}

4.3 字段刪除

刪除一個字段

apluser@FengYeHong-HP:~$ echo -n '{"name":"Alice","age":25,"city":"New York"}' | jq 'del(.city)'
{
  "name": "Alice",
  "age": 25
}

4.4 轉(zhuǎn)換為csv格式

apluser@FengYeHong-HP:~$ echo '{"items":[{"item_id":1,"name":"すてきな雑貨","price":2500},{"item_id":2,"name":"格好いい置物","price":4500},{"item_id":3,"name":"ナイスなお皿","price":4500}]}' | \
jq .
{
  "items": [
    {
      "item_id": 1,
      "name": "すてきな雑貨",
      "price": 2500
    },
    {
      "item_id": 2,
      "name": "格好いい置物",
      "price": 4500
    },
    {
      "item_id": 3,
      "name": "ナイスなお皿",
      "price": 4500
    }
  ]
}
apluser@FengYeHong-HP:~$ echo '{"items":[{"item_id":1,"name":"すてきな雑貨","price":2500},{"item_id":2,"name":"格好いい置物","price":4500},{"item_id":3,"name":"ナイスなお皿","price":4500}]}' | \
jq '.items[] | [.item_id, .name, .price] | @csv' -r
1,"すてきな雑貨",2500
2,"格好いい置物",4500
3,"ナイスなお皿",4500

五. 過濾

5.1 字段整合

apluser@FengYeHong-HP:~$ echo '{"items":[{"item_id":1,"name":"すてきな雑貨","price":2500},{"item_id":2,"name":"格好いい置物","price":4500}]}' | \
jq '.items[] | { name: .name, yen: .price }'
{
  "name": "すてきな雑貨",
  "yen": 2500
}
{
  "name": "格好いい置物",
  "yen": 4500
}

5.2 select過濾

一個條件

apluser@FengYeHong-HP:~$ cat data1.json
[
  {
    "name": "Alice",
    "age": 25,
    "city": "New York"
  },
  {
    "name": "Bob",
    "age": 30,
    "city": "Los Angeles"
  },
  {
    "name": "Charlie",
    "age": 22,
    "city": "Chicago"
  }
]
apluser@FengYeHong-HP:~$ cat data1.json | jq '.[] | select(.age >= 25) | .name, .city'
"Alice"
"New York"
"Bob"
"Los Angeles"
apluser@FengYeHong-HP:~$ cat data1.json | jq '.[] | select(.age >= 25) | .name, .city' | paste -d "," - -
"Alice","New York"
"Bob","Los Angeles"

多個條件

apluser@FengYeHong-HP:~$ cat data1.json | jq '.[] | select(.age >= 25 and .age <= 30) | .name, .city' | sort
"Alice"
"Bob"
"Los Angeles"
"New York"

六. 函數(shù)

6.1 統(tǒng)計函數(shù)

6.1.1 add

apluser@FengYeHong-HP:~$ echo '1 2 3 4' | jq -s 'add'
10
apluser@FengYeHong-HP:~$ seq 4 | jq -s 'add'
10
apluser@FengYeHong-HP:~$ echo '{"items":[{"item_id":1,"name":"すてきな雑貨","price":2500},{"item_id":2,"name":"格好いい置物","price":4500}]}' | \
jq '[.items[].price]'
[
  2500,
  4500
]
apluser@FengYeHong-HP:~$ echo '{"items":[{"item_id":1,"name":"すてきな雑貨","price":2500},{"item_id":2,"name":"格好いい置物","price":4500}]}' | \
jq '[.items[].price] | add'
7000

6.1.2 map

apluser@FengYeHong-HP:~$ echo '{"items":[{"item_id":1,"name":"すてきな雑貨","price":2500},{"item_id":2,"name":"格好いい置物","price":4500}]}' | \
jq '.items | map({ name: .name, yen: .price })'
[
  {
    "name": "すてきな雑貨",
    "yen": 2500
  },
  {
    "name": "格好いい置物",
    "yen": 4500
  }
]
apluser@FengYeHong-HP:~$ seq 4 | jq -s 'map(tostring) | join(",")'
"1,2,3,4"

6.1.3 reduce

apluser@FengYeHong-HP:~$ echo '{"items":[{"item_id":1,"name":"すてきな雑貨","price":2500},{"item_id":2,"name":"格好いい置物","price":4500}]}' | jq '.items[]'
{
  "item_id": 1,
  "name": "すてきな雑貨",
  "price": 2500
}
{
  "item_id": 2,
  "name": "格好いい置物",
  "price": 4500
}
apluser@FengYeHong-HP:~$ echo '{"items":[{"item_id":1,"name":"すてきな雑貨","price":2500},{"item_id":2,"name":"格好いい置物","price":4500}]}' | \
jq 'reduce .items[] as $item (0; . + $item.price)'
7000

6.1.4 unique

apluser@FengYeHong-HP:~$ echo '{"items":[{"item_id":1,"name":"すてきな雑貨","price":2500},{"item_id":2,"name":"格好いい置物","price":4500},{"item_id":3,"name":"ナイスなお皿","price":4500}]}' | \
jq '[.items[].price]'
[
  2500,
  4500,
  4500
]
apluser@FengYeHong-HP:~$ echo '{"items":[{"item_id":1,"name":"すてきな雑貨","price":2500},{"item_id":2,"name":"格好いい置物","price":4500},{"item_id":3,"name":"ナイスなお皿","price":4500}]}' | \
jq '[.items[].price] | unique'
[
  2500,
  4500
]

6.1.5 length

apluser@FengYeHong-HP:~$ echo '{"items":[{"item_id":1,"name":"すてきな雑貨","price":2500},{"item_id":2,"name":"格好いい置物","price":4500},{"item_id":3,"name":"ナイスなお皿","price":4500}]}' | \
jq '.items'
[
  {
    "item_id": 1,
    "name": "すてきな雑貨",
    "price": 2500
  },
  {
    "item_id": 2,
    "name": "格好いい置物",
    "price": 4500
  },
  {
    "item_id": 3,
    "name": "ナイスなお皿",
    "price": 4500
  }
]
apluser@FengYeHong-HP:~$ echo '{"items":[{"item_id":1,"name":"すてきな雑貨","price":2500},{"item_id":2,"name":"格好いい置物","price":4500},{"item_id":3,"name":"ナイスなお皿","price":4500}]}' | \
jq '.items | length'
3

6.2 字符串函數(shù)

6.2.1 contains

apluser@FengYeHong-HP:~$ echo hello | jq -R 'contains("he")'
true

6.2.2startswith/endswith

apluser@FengYeHong-HP:~$ echo hello | jq -R 'startswith("he")'
true
apluser@FengYeHong-HP:~$ echo hello | jq -R 'endswith("llo")'
true

6.2.3ltrimstr/rtrimstr

apluser@FengYeHong-HP:~$ echo ' hello ' | jq -R 'ltrimstr(" ") | rtrimstr(" ")' -r
hello

6.2.4 大小寫轉(zhuǎn)換

apluser@FengYeHong-HP:~$ echo hello | jq -R 'ascii_downcase' -r
hello
apluser@FengYeHong-HP:~$ echo hello | jq -R 'ascii_upcase' -r
HELLO

6.2.5 json對象與json字符串轉(zhuǎn)換

json字符串 ⇒ json對象

apluser@FengYeHong-HP:~$ echo -n '{"id":1,"name":"zhangsan","age":"17","attr":"{\"weight\":56,\"height\":178}"}' | \
jq '.attr = (.attr|fromjson)'
{
  "id": 1,
  "name": "zhangsan",
  "age": "17",
  "attr": {
    "weight": 56,
    "height": 178
  }
}

json對象 ⇒ json字符串

apluser@FengYeHong-HP:~$ echo -n '{"id":1,"name":"zhangsan","age":"17","attr":{"weight":56,"height":178}}' | \
jq '.attr = (.attr|tojson)'
{
  "id": 1,
  "name": "zhangsan",
  "age": "17",
  "attr": "{\"weight\":56,\"height\":178}"
}
apluser@FengYeHong-HP:~$ echo -n '{"id":1,"name":"zhangsan","age":"17","attr":{"weight":56,"height":178}}' | \
jq '.attr = (.attr|tojson)' -c
{"id":1,"name":"zhangsan","age":"17","attr":"{\"weight\":56,\"height\":178}"}

6.3 字段

apluser@FengYeHong-HP:~$ cat data3.json
{
  "name": "Alice",
  "age": 26,
  "city": "New York",
  "info": {
    "sub_id": 10,
    "sub_address": "地球",
    "sub_num_list": [100, 200, 300]
  }
}

6.3.1 keys

  • 獲取所有key
apluser@FengYeHong-HP:~$ cat data3.json | jq '. | keys'
[
  "age",
  "city",
  "info",
  "name"
]

6.3.2 values

  • 獲取所有value
  • jq-1.6.values方法不好用,此處用[.[]]開替代
apluser@FengYeHong-HP:~$ jq --version
jq-1.6
apluser@FengYeHong-HP:~$ cat data3.json | jq '[.[]]'
[
  "Alice",
  26,
  "New York",
  {
    "sub_id": 10,
    "sub_address": "地球",
    "sub_num_list": [
      100,
      200,
      300
    ]
  }
]

6.3.3 to_entries

  • 轉(zhuǎn)換為鍵值對數(shù)組
apluser@FengYeHong-HP:~$ cat data3.json | jq '. | to_entries'
[
  {
    "key": "name",
    "value": "Alice"
  },
  {
    "key": "age",
    "value": 26
  },
  {
    "key": "city",
    "value": "New York"
  },
  {
    "key": "info",
    "value": {
      "sub_id": 10,
      "sub_address": "地球",
      "sub_num_list": [
        100,
        200,
        300
      ]
    }
  }
]

七. 排序

排序之前

apluser@FengYeHong-HP:~$ echo '[{"name": "Tom", "age": 25},{"name": "Jerry", "age": 18},{"name": "Alice", "age": 30}]' | jq
[
  {
    "name": "Tom",
    "age": 25
  },
  {
    "name": "Jerry",
    "age": 18
  },
  {
    "name": "Alice",
    "age": 30
  }
]

按照指定 字段(age) 升序排序

apluser@FengYeHong-HP:~$ echo '[{"name": "Tom", "age": 25},{"name": "Jerry", "age": 18},{"name": "Alice", "age": 30}]' | \
jq 'sort_by(.age)'
[
  {
    "name": "Jerry",
    "age": 18
  },
  {
    "name": "Tom",
    "age": 25
  },
  {
    "name": "Alice",
    "age": 30
  }
]

按照指定 字段(age) 降序排序

apluser@FengYeHong-HP:~$ echo '[{"name": "Tom", "age": 25},{"name": "Jerry", "age": 18},{"name": "Alice", "age": 30}]' | \
jq 'sort_by(.age) | reverse'
[
  {
    "name": "Alice",
    "age": 30
  },
  {
    "name": "Tom",
    "age": 25
  },
  {
    "name": "Jerry",
    "age": 18
  }
]

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 最完的htaccess文件用法收集整理

    最完的htaccess文件用法收集整理

    最完的htaccess文件用法收集,這篇文章確實很詳細,需要的朋友可以參考下
    2012-05-05
  • Linux腳本(shell)的使用方式

    Linux腳本(shell)的使用方式

    這篇文章主要介紹了Linux腳本(shell)的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • linux 入侵常用命令匯編

    linux 入侵常用命令匯編

    掌握這些命令也有助于配置linux的安全,大家可以看看。
    2009-07-07
  • linux ssh如何實現(xiàn)增加訪問端口

    linux ssh如何實現(xiàn)增加訪問端口

    Linux中SSH默認使用22端口,為了增強安全性或滿足特定需求,可以通過修改SSH配置來增加或更改SSH訪問端口,具體步驟包括修改SSH配置文件、增加或修改端口、保存并退出編輯器、更新防火墻規(guī)則、重啟SSH服務(wù)、測試新端口以及(可選)禁用默認端口
    2025-11-11
  • crontab執(zhí)行結(jié)果未通過發(fā)送mail通知用戶的方法

    crontab執(zhí)行結(jié)果未通過發(fā)送mail通知用戶的方法

    這篇文章主要給大家介紹了關(guān)于crontab執(zhí)行結(jié)果未通過發(fā)送mail通知用戶的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用linux系統(tǒng)具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 如何利用Gitlab-ci持續(xù)部署到遠程機器(詳細教程)

    如何利用Gitlab-ci持續(xù)部署到遠程機器(詳細教程)

    這篇文章主要介紹了如何利用Gitlab-ci持續(xù)部署到遠程機器(詳細教程),本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • 解決Linux中“command not found”錯誤的終極指南

    解決Linux中“command not found”錯誤的終極指南

    在 Linux 系統(tǒng)中操作時,你可能會遇到一個常見的錯誤消息:“command not found”,這個錯誤通常出現(xiàn)在你嘗試運行一個不存在或系統(tǒng)找不到的命令時,本文將帶你了解這一錯誤的原因,并提供詳細的解決方法,需要的朋友可以參考下
    2025-08-08
  • linux環(huán)境不使用hadoop安裝單機版spark的方法

    linux環(huán)境不使用hadoop安裝單機版spark的方法

    今天小編就為大家分享一篇關(guān)于linux環(huán)境不使用hadoop安裝單機版spark的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • Linux設(shè)置虛擬內(nèi)存的教學(xué)與實戰(zhàn)教程

    Linux設(shè)置虛擬內(nèi)存的教學(xué)與實戰(zhàn)教程

    這篇文章主要給大家介紹了關(guān)于Linux設(shè)置虛擬內(nèi)存教學(xué)與實戰(zhàn)的相關(guān)資料,文中通過示例代碼以及圖文介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 在Linux中配置和使用CAN通信的詳細指南

    在Linux中配置和使用CAN通信的詳細指南

    CAN是一種廣泛用于嵌入式系統(tǒng)、汽車和工業(yè)控制中的通信協(xié)議,Linux 支持 CAN 協(xié)議棧,并通過 SocketCAN 實現(xiàn)對 CAN 總線的訪問,在這篇博客中,我們將深入講解如何在 Linux 系統(tǒng)中配置和使用 CAN 通信,需要的朋友可以參考下
    2025-08-08

最新評論

大余县| 桃园县| 承德县| 重庆市| 大荔县| 历史| 都兰县| 卓尼县| 镇宁| 临澧县| 岳阳市| 晋中市| 平邑县| 宾阳县| 白山市| 工布江达县| 巴林左旗| 金阳县| 包头市| 濉溪县| 陵川县| 澄城县| 英吉沙县| 山西省| 邯郸县| 元朗区| 潜江市| 汶川县| 普兰店市| 南部县| 阆中市| 禄丰县| 申扎县| 如东县| 青浦区| 灵台县| 台中市| 青阳县| 东辽县| 锡林郭勒盟| 大冶市|