jq в CLI создает ошибку, когда я хочу проанализировать вывод
Использование Home Assistant 0.92 для тестирования моего CLI для создания автоматического резервного копирования. После успешного резервного копирования команда отвечает выводом, и мне нужно поймать это значение. Я пытаюсь использовать jq для его анализа, но получаю только ошибку.
$ hassio snapshots new --name"Testbackup"
Это дает вывод slug: 07afd144
и я хочу поймать 07afd144
Пробовал следующее:
$ hassio snapshots new --name"Testbackup" | jq --raw-output '.data.slug'
Это дает вывод parse error: Invalid numeric literal at line 1, column 5
Окончательный результат планируется:
slug=$(hassio snapshots new --name="${name}" | jq --raw-output '.data.slug')
где ${slug}=07afd144
Что я делаю неправильно?
2 ответа
jq
— это инструмент для анализа и преобразования документов JSON. То, что вы показали, не является законным JSON. Однако это юридический документ YAML, и его можно преобразовать с помощью.yq
использует синтаксис, подобный jq, но может обрабатывать файлы JSON, YAML, XML и CSV.
slug=$(hassio snapshots new --name="${name}" | yq '.slug')
slug: 07afd144
недействителен JSON и поэтому не может быть проанализирован с помощьюjq
. Кроме того, он не содержитdata
имущество в любом месте, поэтому.data.slug
не имеет смысла.
Если формат всегда такой простой (имя свойства, двоеточие, пробел, значение), то значение можно легко извлечь с помощью других общедоступных инструментов, обычно доступных в системах GNU+Linux:
cut
(возможны разные вызовы):cut -d' ' -f2- cut -c7-
awk
:awk '{print $2}'
sed
:sed 's/^slug: //'
`перл:
perl -lane 'print $F[0]'
или даже
grep
(возможны разные вызовы):grep -o '[^ ]*$' grep -o '[[:xdigit:]]*$'