# JC,將 CLI 指令輸出轉換為 JSON 的神器
官網:https://github.com/kellyjonbrazil/jc
# 簡介
在撰寫 Shell Script 時,最麻煩的事情之一就是解析各種指令的輸出。 ls 、 ps 、 netstat 、 dig …… 每個指令的輸出格式都不一樣,光是用 awk 、 sed 、 grep 處理就已經讓人頭大了。
jc 就是為了解決這個痛點而生的工具。它能將超過 150 種常見 CLI 指令的純文字輸出,自動轉換成結構化的 JSON 格式,之後再搭配 jq 做進一步處理,整個工作流程變得乾淨又優雅。
# 安裝
# Debian / Ubuntu
sudo apt-get install jc |
# Fedora / CentOS
sudo dnf install jc |
# macOS
brew install jc |
# pip(跨平台)
pip3 install jc |
# 基本用法
jc 有兩種使用方式:
方式一:管線(pipe)
COMMAND | jc --PARSER |
方式二:Magic 語法(直接呼叫)
jc COMMAND |
加上 -p 參數可以讓輸出的 JSON 更易讀(Pretty Print)。
# 範例
# ls
ls -l | jc --ls -p | ||
[ | ||
{ | ||
"filename": "jc-tutorial.md", | ||
"flags": "-rw-r--r--", | ||
"links": 1, | ||
"owner": "jerry", | ||
"group": "jerry", | ||
"size": 2048, | ||
"date": "Mar 29 12:00" | ||
} | ||
] |
# ps
ps aux | jc --ps -p | ||
[ | ||
{ | ||
"user": "root", | ||
"pid": 1, | ||
"cpu_percent": 0.0, | ||
"mem_percent": 0.1, | ||
"vsz": 168936, | ||
"rss": 13596, | ||
"tty": null, | ||
"stat": "Ss", | ||
"start": "Mar28", | ||
"time": "0:02", | ||
"command": "/sbin/init" | ||
} | ||
] |
# ping
ping -c 3 google.com | jc --ping -p | ||
{ | ||
"destination_ip": "142.250.185.46", | ||
"data_bytes": 56, | ||
"packets_transmitted": 3, | ||
"packets_received": 3, | ||
"packet_loss_percent": 0.0, | ||
"time_ms": 2003.0, | ||
"round_trip_ms_min": 5.432, | ||
"round_trip_ms_avg": 5.891, | ||
"round_trip_ms_max": 6.543 | ||
} |
# dig
dig example.com | jc --dig | jq -r '.[].answer[].data' | ||
93.184.216.34 |
這個例子展示了 jc 與 jq 的完美搭配,先用 jc 轉成 JSON,再用 jq 精準取值。
# /etc/passwd(直接解析檔案格式)
jc 不只能處理指令輸出,也能解析常見的設定檔格式:
cat /etc/passwd | jc --passwd -p | ||
[ | ||
{ | ||
"username": "root", | ||
"password": "x", | ||
"uid": 0, | ||
"gid": 0, | ||
"comment": "root", | ||
"home": "/root", | ||
"shell": "/bin/bash" | ||
} | ||
] |
# 支援的 Parser 一覽(部分)
| 類別 | 指令 / 格式 |
|---|---|
| 網路 | arp , dig , ifconfig , ip , netstat , ping , route , ss |
| 系統 | df , du , free , ls , mount , ps , uname , uptime |
| 套件管理 | dpkg , rpm , pip list |
| 檔案格式 | CSV, JSON, YAML, XML, INI, TOML |
| 設定檔 | /etc/passwd , /etc/hosts , crontab , fstab |
| 其他 | date , env , git log , history , cURL |
完整的 Parser 列表可以在 官方 GitHub 查詢。
# Magic 語法
jc 還支援一種更直覺的「Magic 語法」,不需要手動指定 Parser,它會自動偵測:
jc -p dig example.com | ||
jc -p ls -la | ||
jc -p ps aux |
省去了記憶 --dig 、 --ls 等 Parser 名稱的負擔,非常方便。
# 結語
如果你常常需要在 Shell Script 中解析指令輸出, jc 絕對值得安裝。搭配 jq 一起使用,可以用非常簡潔的方式完成過去需要大量 awk / sed 才能做到的事。下次面對雜亂的 CLI 輸出時,不妨讓 jc 幫你把它變成乾淨的 JSON。