Как я могу отфильтровать определенную часть ответа JSON в оболочке пепла

[112412] Для временного изменения можно использовать команду [112911]имя хоста[112912]:[12150] Для постоянного изменения необходимо отредактировать файл [112913]/etc/hostname[112914], заменить старое имя на новое.[112415].
1
27.05.2015, 20:46
6 ответов

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

, чтобы получить (необработанную) строку без кавычек.

4
27.01.2020, 23:13

Предполагая, что вы храните 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, поэтому это будет работать, если у вас всегда такая же структура, как пример.

0
27.01.2020, 23:13

Используя sed, передайте вывод wget на

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

Это соответствует {"обновление": части возвращаемой строки, а затем извлекает содержимое в двойных кавычках, следуя за совпадением части.

1
27.01.2020, 23:13

Как сказал сам Флохим, вы должны действительно использовать настоящий JSON парсер. Есть много крайних случаев, которые нелегко охватить простым текстовым процессором.

С этой оговоркой:

sed 's/.*"update":"\([^"]\+\)".*/\1/'
1
27.01.2020, 23:13

Нагиос :: плагины были переименованы в на мониторинг :: плагины из-за причины товарных знаков. CPAN не указан Nagios :: плагины . Теперь вы должны установить мониторинг :: плагин

perl -MCPAN -e 'install Monitoring::Plugin'

или вы можете установить его через CPANM. Сначала установите CPANM:

curl -L http://cpanmin.us | perl - --sudo App::cpanminus

, а затем установите модуль

cpanm Monitoring::Plugin

дальнейшее чтение

-121----00998-

Я должен был бы сказать - использовать 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 официально не заботится о том, куда идут ваши линейные ширины, и позволяет вложению - и что имеет тенденцию делать регулярные выражения и на основе линейных разборных хрупких.

1
27.01.2020, 23:13

Использование 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
0
27.01.2020, 23:13

Теги

Похожие вопросы