コマンドの結果をいい感じに、配列にしたい
コマンドの実行結果を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 と組み合わせできるのでよい。