linux 命令之jq
jq命令允許直接在命令行下對JSON進行操作,包括分片、過濾、轉換等
JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。基於JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一個子集
JSON 數據的書寫格式是: 名稱/對象。
JSON的結構基於兩點
- “名稱/值”的集合 ,在不同的語言中,它可以被理解為對象(object),記錄(record),結構(struct),字典(dictionary),哈希表(hash table),鍵列表(keyed list)等 .
-
值的有序列表 多數語言中被理解為數組(array)
JSON的基礎結構說明
- 對象是屬性、值的集合。一個對象開始與”{” ,結束於”}”。每一個屬性名和值間用”:”分隔。每個屬性間用”,”分隔。
- 值可以是字符串,數字,邏輯值,數組,對象,null。
數字:整數或浮點數
字符串:在雙引號中
邏輯符:true和false
數組:在方括號中
對象:在花括號中
null: 代表空
Ubuntu下的jq安裝
apt-get install jq
- 1
jq命令的格式
jq [options] filter [files]
**options:**
--version:輸出jq的版本信息並退出 --slurp/-s:讀入整個輸入流到一個數組。 --raw-input/-R:不作為JSON解析,將每一行的文本作為字符串輸出到屏幕。 --null-input/ -n:不讀取任何輸入,過濾器運行使用null作為輸入。一般用作從頭構建JSON數據。 --compact-output /-c:使輸出緊湊,而不是把每一個JSON對象輸出在一行。 --colour-output / -C:打開顏色顯示 --monochrome-output / -M:關閉顏色顯示 --ascii-output /-a:指定輸出格式為ASCII -raw-output /-r :如果過濾的結果是一個字符串,那么直接寫到標准輸出(去掉字符串的引號) **filter:** . : 默認輸出 .foo: 輸出指定屬性,foo代表屬性。 .[foo] :輸出指定數組元素。foo代表數組下標。 .[]:輸出指定數組中全部元素 , :指定多個屬性作為過濾條件時,用逗號分隔 | : 將指定的數組元素中的某個屬性作為過濾條件 **files:** JOSN格式文件。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
用作示例的JOSN文件。
[{"hostCompany":"Beijing Autelan Technology","hostModel":"CS-VIC-2000-C","hostsn":"01010730b12014A00477","mac":"00:1F:64:CE:F3:8E","cpuModel":"MIPS 74Kc V4.12","cpuSN":"000000","memoryModel":"abcdefg","memorySN":"000000","boardSN":"01010730b12014A00477","networkCardMac":"00:1F:64:CE:F3:8F","lowFreModel":"AR9344","lowFreSN":"000000","hignFreModel":"AR9582","hignFreSN":"000000","gpsModel":"abcdefg","gpsSN":"000000","MEID_3g":"A000004E123ABD2","Company_3g":"ZTEMT INCORPORATED","modelOf3g":"MC271X","snOf3g":"A000004E123ABD2","iccid":"89860314400200885980","Operators":"CTCC","hardVersion":"1.20","firmwareVersion":"1.0.6.29"}]
- 1
示例:
$ jq . apinfo.json [ { "firmwareVersion": "1.0.6.29", "hardVersion": "1.20", "Operators": "CTCC", "iccid": "DATA DATA", "snOf3g": "A000004E123ABD2", "modelOf3g": "MC271X", "Company_3g": "ZTEMT INCORPORATED", "MEID_3g": "A000004E123ABD2", "memorySN": "000000", "memoryModel": "abcdefg", "cpuSN": "000000", "cpuModel": "MIPS 74Kc V4.12", "mac": "00:1F:64:CE:F3:8E", "hostsn": "01010730b12014A00477", "hostModel": "CS-VIC-1999-C", "stCompany": "Beijing Autelan Technology", "boardSN": "01010730b12014A00477", "networkCardMac": "00:1F:64:CE:F3:8F", "lowFreModel": "AR9344", "lowFreSN": "000000", "hignFreModel": "AR9582", "hignFreSN": "000000", "gpsModel": "abcdefg", "gpsSN": "000000" } ] jq .[] apinfo.json { "firmwareVersion": "1.0.6.29", "hardVersion": "1.20", "Operators": "CTCC", "iccid": "DATA DATA", "snOf3g": "A000004E123ABD2", "modelOf3g": "MC271X", "Company_3g": "ZTEMT INCORPORATED", "MEID_3g": "A000004E123ABD2", "memorySN": "000000", "memoryModel": "abcdefg", "cpuSN": "000000", "cpuModel": "MIPS 74Kc V4.12", "mac": "00:1F:64:CE:F3:8E", "hostsn": "01010730b12014A00477", "hostModel": "CS-VIC-1999-C", "stCompany": "Beijing Autelan Technology", "boardSN": "01010730b12014A00477", "networkCardMac": "00:1F:64:CE:F3:8F", "lowFreModel": "AR9344", "lowFreSN": "000000", "hignFreModel": "AR9582", "hignFreSN": "000000", "gpsModel": "abcdefg", "gpsSN": "000000" }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
$ jq -r .[].mac apinfo.json 00:1F:64:CE:F3:8E $ jq -r '.[] | .mac' apinfo.json 00:1F:64:CE:F3:8E $ jq -r '.[] |.mac, .gpsSN' apinfo.json 00:1F:64:CE:F3:8E 000000 jq -r '.[].mac, .[].gpsSN' apinfo.json 00:1F:64:CE:F3:8E 000000