[每日短篇] 27 - 在 Shell 腳本或命令行中操做 Json

如今使用 json 或者 yaml 格式的配置文件愈來愈廣泛,而編寫 shell 腳本常常須要操做配置文件,這就產生一個新問題:如何操做這些格式的配置文件。本文先解決操做 json 文件的問題。下面列出常見的一些操做,其它操做能夠照此辦理。做者推薦的 Linux 發行版仍然是 Ubuntu,即便在 Ubuntu Cloud Image 中下面的操做均可以直接執行而不需安裝額外的包。python

添加值

以給 docker 添加 mirror 爲例,配置文件爲 json 格式,給 json 添加一個名爲 registry-mirrors 的屬性。docker

echo -e "import json;j = json.load(open('/etc/docker/daemon.json'));\nj['registry-mirrors']='$1';print(json.dumps(j))" | python3 > /etc/docker/daemon.json

刪除值

仍是以 docker 配置文件爲例,把剛添加到 json 配置文件中的屬性刪掉shell

echo -e "import json;j = json.load(open('/etc/docker/daemon.json'));\nif 'registry-mirrors' in j: del j['registry-mirrors'];print(json.dumps(j))" | python3 > /etc/docker/daemon.json

提取值

繼續以 docker 配置文件爲例,讀取 json 文件查詢屬性的值json

echo -e "import json;j = json.load(open('/etc/docker/daemon.json'));\nif 'registry-mirrors' in j: print(j['registry-mirrors'])" | python3

其中 jjson.load 生成的對象,能夠獲取其中的任意屬性並進行處理。工具

格式化輸出 json

cat /etc/docker/daemon.json | python3 -m json.tool

若是要對 key 排序輸出可添加 --sort-keys 參數code

cat /etc/docker/daemon.json | python3 -m json.tool --sort-keys

上面幾種操做已經覆蓋了大多數場景,沒有覆蓋的場景使用上面兩個工具也很容易解決。對象

相關文章
相關標籤/搜索