jq filter: показать всю структуру с выделением

Как упоминалось в комментариях, Alsa, похоже, не может прозрачно переключать запущенные программы с одного устройства воспроизведения на другое, поскольку это особенность PulseAudio. Более того, выбор устройства в микшере Alsa будет определять только элементы управления микшером, отображаемые в микшере , и не имеет никакого отношения к звуковой карте по умолчанию, используемой медиаплеерами.

Существует минималистичный графический интерфейс Python, который позволяет обнаруживать подключенные USB-ЦАП и устанавливать устройство воспроизведения по умолчанию для новых программ: asouncdconf-gtk (изначально написано для Ubuntu с учетом Xfce). Эта утилита использует скрипт Python asoundconf . Даже если он не поддерживался в течение нескольких лет (последнее обновление в 2011 году), похоже, он все еще нормально работает в современных дистрибутивах (например, Ubuntu 14.04).

enter image description here

Пользователи Ubuntu могут устанавливать пакеты из asoundconf PPA (официально Ubuntu имеет достойную поддержку только для PulseAudio). Для Arch Linux см. Есть ли простой способ переключить звуковые карты воспроизведения? . Но поскольку это код Python, он может работать практически в любом дистрибутиве: возьмите Ubuntu .deb , распакуйте его с помощью диспетчера архивов и поместите сценарии в / usr / bin .


В официальных документах Alsa указывается только ручной способ установки звуковой карты по умолчанию :

Найдите соответствующую карту:

cat /proc/asound/cards

и затем вставьте / etc / asound.conf :

defaults.pcm.card 1
defaults.ctl.card 1

Замена «1» на номер соответствующей карты. Вряд ли вы хотели бы делать что-то часто, например с USB-ЦАП.


Дополнительная литература:

  • Asoundconf для Ubuntu 10.10 (Maverick) для более подробного обсуждения Alsa-only и PulseAudio в дистрибутивах Ubuntu.
  • alsa-utils отсутствует asoundconf - Ubuntu сообщает, что они WONTFIX это для пользователей только Alsa (т.е. заставлять своих пользователей использовать PulseAudio; похоже, это корпоративная вещь, поскольку Skype сделал то же самое с версией 4.3 ...)

0
09.03.2018, 23:44
2 ответа

Напрямую сjq:

jq '{ starts: [ { attributeList: (.starts[].attributeList 
                                  | map(select(.name == "Command"))) }] }' file.json

Выход:

{
  "starts": [
    {
      "attributeList": [
        {
          "name": "Command",
          "value": "bash"
        }
      ]
    }
  ]
}
2
28.01.2020, 02:43

Вот два варианта получения желаемого результата.

Вы можете удалить ненужные ключи:

jq 'del(.attributes,.name) | 
 .starts[].attributeList = map(.[].attributeList[] | select(.name == "Command"))'

Или вы можете выбрать только те клавиши (и ), которые вам нужны:

jq 'to_entries | map(select(.key == "starts")) | from_entries | 
 .starts[].attributeList = map(.[].attributeList[] | select(.name == "Command"))'

Оба дают один и тот же результат. Также, если вам нужны startsи endsв последнем случае,вы можете просто добавить дополнительные операторы or:map(select((.key == "starts") or (.key == "ends"))).

0
28.01.2020, 02:43

Теги

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