-qOでwgetを使用してOpenELECの特定のアップデータURLにアクセスします。これは以下のようなJSON応答を提供します。
{"data":{"update":"OpenELEC-RPi2.arm-5.0.8.tar","folder":"releases","host":"","MD5":""}}
tarの完全なファイル名だけが必要で、他のものは必要ありません。
他のすべての不要な情報をフィルタリングする最良の方法は何ですか?
答え1
ジャックします:
$ 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
引用符なしで(生)文字列を取得します。
答え2
FloHimselfが述べたように、実際のJSONパーサーを使用する必要があります。単純なテキストプロセッサでは簡単に扱えない極端なケースがたくさんあります。
この警告とともに:
sed 's/.*"update":"\([^"]\+\)".*/\1/'
答え3
JSONを次のファイルに保存するとしますjsonfile
。
awk -F "update" '{print $2}' jsonfile | awk -F ":" '{print $2}' | awk -F "," '{ gsub(/"/,"" ); print $1}'
結果を与えますOpenELEC-RPi2.arm-5.0.8.tar
。
これはJSONパーサではないため、常に例と同じ構造を使用している場合は機能します。
答え4
を使用してsed
出力をwget
次にパイプします。
sed -n 's/^.*{"update":"\([^"]*\)".*$/\1/p'
これは、{"update":
返された文字列の一部と一致し、一致した部分の後に二重引用符で囲まれた内容を抽出します。