Shell

如何在 ash shell 中過濾掉 JSON 響應的特定部分

  • May 27, 2015

我將 wget 與 -qO 一起用於 OpenELEC 的特定更新程序 URL,該 URL 提供以下 JSON 響應,類似於下面的響應。

{"data":{"update":"OpenELEC-RPi2.arm-5.0.8.tar","folder":"releases","host":"","MD5":""}}

我只需要 tar 的完整文件名,不需要其他任何東西。

過濾掉所有其他不需要的資訊的最佳方法是什麼?

jq會做:

$ jq ".data.update" <<< '{"data":{"update":"OpenELEC-RPi2.arm-5.0.8.tar","folder":"releases","host":"","MD5":""}}'
"OpenELEC-RPi2.arm-5.0.8.tar"

或與-r

jq -r ".data.update" <<< '{"data":{"update":"OpenELEC-RPi2.arm-5.0.8.tar","folder":"releases","host":"","MD5":""}}'
OpenELEC-RPi2.arm-5.0.8.tar

獲取不帶引號的(原始)字元串。

使用sed,管道輸出wget

sed -n 's/^.*{"update":"\([^"]*\)".*$/\1/p'

這匹配{"update":返回字元串的部分,然後在匹配部分後面的雙引號中提取內容。

引用自:https://unix.stackexchange.com/questions/199122