コマンドの結果をいい感じに、配列にしたい
コマンドの実行結果をJSONにしたいと思った。
https://dev.classmethod.jp/articles/jc-tool/
jc コマンド
jc コマンドは、STDINを読み取って JSONに変換してくれる。
数多くのパーサーが用意されてプリインいる、パーサーがなくてもjc はそこそこ便利。
jc コマンドを試す。
$ id | jc --id --pretty
結果はJSONになる。
{ "uid": { "id": 1000, "name": "takuya" }, "gid": { "id": 1000, "name": "takuya" }, "groups": [ { "id": 1000, "name": "takuya" }, { "id": 4, "name": "adm" } ] }
プリインストールのパーサーがいっぱいある
(略 --ls `ls` command parser --ls-s `ls` command streaming parser --lsblk `lsblk` command parser --lsmod `lsmod` command parser --lsof `lsof` command parser --lsusb `lsusb` command parser --nmcli `nmcli` command parser --passwd `/etc/passwd` file parser --ping `ping` and `ping6` command parser --systemctl `systemctl` command parser --systemctl-lj `systemctl list-jobs` command parser --systemctl-ls `systemctl list-sockets` command parser --systemctl-luf `systemctl list-unit-files` command parser --systeminfo `systeminfo` command parser --top `top -b` command parser (略
プリインなパーサがなくても大丈夫。いい感じにJSON配列になる。
サクッと行ごとに出力して
$ apt list vim* 2>/dev/null | grep vim | cut -d '/' -f 1 | sort | head -n 5 vim vim-addon-manager vim-addon-mw-utils vim-airline vim-airline-themes
jc / jq でサクッと整形する。
apt list vim* 2>/dev/null | grep vim | cut -d '/' -f 1 | sort | head -n 5 | \ jc --kv | \ jq keys
行ー>配列になる。
[ "vim", "vim-addon-manager", "vim-addon-mw-utils", "vim-airline", "vim-airline-themes" ]
Key/Valueを使ってオブジェクトにする
プリインストールがないなら、脳死で考えるのをやめて キーバリューに仕立てる
Key/Valueを grep / sed /awk で作る
cat /etc/php/8.0/cli/php.ini | grep -v \; | grep = | grep session | sed 's/ = /:/' session.save_handler:files session.use_strict_mode:0 session.use_cookies:1 session.use_only_cookies:1 session.name:PHPSESSID session.auto_start:0 session.cookie_lifetime:0 session.cookie_path:/ session.cookie_domain = session.cookie_httponly = session.cookie_samesite = session.serialize_handler:php session.gc_probability:0 session.gc_divisor:1000 session.gc_maxlifetime:1440 session.referer_check = session.cache_limiter:nocache session.cache_expire:180 session.use_trans_sid:0 session.sid_length:26 session.trans_sid_tags:"a=href,area=href,frame=src,form=" session.sid_bits_per_character:5
jc にかける
cat /etc/php/8.0/cli/php.ini | grep -v \; | grep = | grep session | sed 's/ = /:/' | jc --kv --pretty { "session.save_handler": "files", "session.use_strict_mode": "0", "session.use_cookies": "1", "session.use_only_cookies": "1", "session.name": "PHPSESSID", "session.auto_start": "0", "session.cookie_lifetime": "0", "session.cookie_path": "/", "session.cookie_domain": "", "session.cookie_httponly": "", "session.cookie_samesite": "", "session.serialize_handler": "php", "session.gc_probability": "0", "session.gc_divisor": "1000", "session.gc_maxlifetime": "1440", "session.referer_check": "", "session.cache_limiter": "nocache", "session.cache_expire": "180", "session.use_trans_sid": "0", "session.sid_length": "26", "session.trans_sid_tags": "a=href,area=href,frame=src,form=", "session.sid_bits_per_character": "5" }
jc コマンドでシェルの実行結果を JSONに変えられる
jc コマンドは対応コマンドはきれいにJSONに代わる。非対応のものは、--kv
で Key/Value として処理すれば簡単に jq で解釈できる。
インストール
pip3 install jc
パーサーが無いコマンド
パーサーがない場合は、jc --csv
jc --kv
でJSONにすればいいので、awk コマンドでいい感じに整形すればいい。
整形結果をフィルタするときは、 ` jc --kv | jq .
で jq と組み合わせできるのでよい。