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
, чтобы получить (необработанную) строку без кавычек.
Предполагая, что вы храните 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, поэтому это будет работать, если у вас всегда такая же структура, как пример.
Используя sed
, передайте вывод wget
на
sed -n 's/^.*{"update":"\([^"]*\)".*$/\1/p'
Это соответствует {"обновление":
части возвращаемой строки, а затем извлекает содержимое в двойных кавычках, следуя за совпадением части.
Как сказал сам Флохим, вы должны действительно использовать настоящий JSON парсер. Есть много крайних случаев, которые нелегко охватить простым текстовым процессором.
С этой оговоркой:
sed 's/.*"update":"\([^"]\+\)".*/\1/'
Нагиос :: плагины
были переименованы в на мониторинг :: плагины
из-за причины товарных знаков. CPAN
не указан Nagios :: плагины
. Теперь вы должны установить мониторинг :: плагин
perl -MCPAN -e 'install Monitoring::Plugin'
или вы можете установить его через CPANM. Сначала установите CPANM:
curl -L http://cpanmin.us | perl - --sudo App::cpanminus
, а затем установите модуль
cpanm Monitoring::Plugin
дальнейшее чтение
Я должен был бы сказать - использовать Perl. Я не на 100% уверен, что если это установлено на вашей ОС, но есть довольно хороший шанс, это - это довольно распространенная базовая установка компонента.
#!/usr/bin/env perl
use strict;
use warnings;
use JSON;
print decode_json ( <DATA> ) -> {data} -> {update};
__DATA__
{"data":{"update":"OpenELEC-RPi2.arm-5.0.8.tar","folder":"releases","host":"","MD5":""}}
Это было бы «один вкладыш»:
perl -MJSON -0ne 'print decode_json($_)->{data}->{update}' jsonfile
преимущество в том, что вы используете парсер JSON, поэтому он будет работать, если ваш файл JSON содержит:
{"data":{"update":"OpenELEC-RPi2.arm-5.0.8.tar","folder":"releases","host":"","MD5":""}}
или
{
"data" : {
"host" : "",
"MD5" : "",
"update" : "OpenELEC-RPi2.arm-5.0.8.tar",
"folder" : "releases"
}
}
Или какое-то другое совершенно действительное переформатирование JSON. Вот почему использование парсера действительно является идеальным способом этого, потому что JSON официально не заботится о том, куда идут ваши линейные ширины, и позволяет вложению - и что имеет тенденцию делать регулярные выражения и на основе линейных разборных хрупких.
Использование grep
с PCRE:
grep -Po '(?<=:").*\.tar(?=")'
Тест:
$ foo='{"data":{"update":"OpenELEC-RPi2.arm-5.0.8.tar","folder":"releases","host":"","MD5":""}}'
$ grep -Po '(?<=:").*\.tar(?=")' <<<"$foo"
OpenELEC-RPi2.arm-5.0.8.tar