# JC,將 CLI 指令輸出轉換為 JSON 的神器

官網:https://github.com/kellyjonbrazil/jc

# 簡介

在撰寫 Shell Script 時,最麻煩的事情之一就是解析各種指令的輸出。 lspsnetstatdig …… 每個指令的輸出格式都不一樣,光是用 awksedgrep 處理就已經讓人頭大了。

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

這個例子展示了 jcjq 的完美搭配,先用 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。