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:]]*$'
    
Другие вопросы по тегам