Как мне получить результат с помощью jq таким образом, чтобы он давал мне всю строку, в которой появилось слово или строка

Пожалуйста, не используйте сценарий, предоставленный веб-сайтом Nvidia, вы, вероятно, сломаете свою систему (и создадите FrankenDebian , как вы, кажется, уже сделали.

Жизнеспособным и стабильным методом является использование вики Debian, которая, вкратце, выглядит следующим образом:

1 )Знайте кодовое имя своего дистрибутива Debian:

 $ lsb_release -a | grep Codename

2 )Добавьте репозитории contribи non-free

Вам необходимо изменить свой /etc/apt/sources.list, добавив «contrib» и «non -free» после «main». Например, если вы используете «buster»:

deb http://httpredir.debian.org/debian/ buster main contrib non-free

3 )Обновите кеш менеджера пакетов:

 # apt update

4 )Установите заголовки ядра и проприетарный драйвер Nvidia:

 # apt install apt install linux-headers-$(uname -r|sed 's/[^-]*-[^-]*-//') nvidia-driver

5 )Перезагрузите систему

 # reboot

У вас должны быть все необходимые инструменты для получения статистики и настроек графического процессора, например nvidia-smiи nvidia-settings. Обратите внимание, что вам не нужно иметь xorg.conf, так как хрипит, за исключением некоторой тонкой настройки -.

1
10.11.2021, 19:37
3 ответа

Вы можете использовать:

curl wttr.in/Pune?format=j1 | jq '.current_condition[].localObsDateTime'
2
10.11.2021, 20:50

Сjq:

curl -s 'http://wttr.in/Pune?format=j1' | jq -r '.current_condition[].localObsDateTime'

Выход:

2021-11-11 03:01 AM
3
10.11.2021, 20:50

Если вы точно не знаете, где в документе JSON находится ключ localObsDateTime, вам придется искать его рекурсивно. Вы можете сделать это, а затем извлечь его значение с помощью следующего jqвыражения:

.. | select(type == "object" and has("localObsDateTime")).localObsDateTime

По сути, это говорит: «Для каждой отдельной вещи в документе, если это объект и имеет ключ с именем localObsDateTime, извлеките значение этого ключа».

Вы также можете сократить его до

.. |.localObsDateTime? // empty

, в котором говорится: «Для каждой отдельной вещи в документе попробуйте извлечь значение localObsDateTime, если оно существует, а если оно не существует или его значение равно null, просто не давайте мне ничего».

Вы бы запустили это вот так:

$ curl -s 'http://wttr.in/Pune?format=j2' |
    jq -r '.. | select(type == "object" and has("localObsDateTime")).localObsDateTime'
2021-11-17 12:16 AM

или,

$ curl -s 'http://wttr.in/Pune?format=j2' |
    jq -r '.. |.localObsDateTime? // empty'
2021-11-17 12:16 AM

Опция -rдля jqзаставляет утилиту возвращать декодированную текстовую строку, а не строку JSON.

Обратите внимание, что вышеприведенное возвращает значения всех клавиш localObsDateTime. Если вам нужен только первый из них, используйте вместо этого следующее выражение jq:

[.. | select(type == "object" and has("localObsDateTime")).localObsDateTime ][0]

или,

[.. |.localObsDateTime? // empty ][0]

Это создает массив всех значений, а затем извлекает первое.

Обратите внимание, что использование j2вместо j1в URL-адресе приводит к тому, что документ JSON в ответе становится меньше.

1
11.11.2021, 07:10

Теги

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