Рейтинг:0

Извлечь ключи из файла yaml с помощью awk

флаг ru

Допустим, у меня есть файл yaml, подобный этому:

фу:
  бар: 1

среда:
  первая переменная: правда
  второйVar: 20
  aa_ ThirdVar: 'привет'
  aa_fourthVar: ложь

и мне нужно получить ключи под окружение ключ, за исключением ключей с аа_ префикс как массив bash, чтобы использовать массив в скрипте bash.

Рейтинг:1
флаг cn

С использованием yq команда из https://kislyuk.github.io/yq/ подходящий инструмент для анализа файлов формата YAML, вы можете сделать:

yq -r '.env|to_entries[]|
    если (.key|test("^[^a][^a][^_]*$")) тогда
        ( .key + "=" + (.value | @sh))
    еще
        пустой
    конец
'профиль

который выводит:

первая переменная = истина
вторая переменная = 20

теперь вам нужно только экспорт эти наборы переменных

экспортировать $(yq...)

или создать массив:

IFS=$'\n' arr=($(yq...))

в ( .key + "=" + (.value | @sh)) часть, он объединяет пары ключ-значение, которые создаются с помощью to_entries функции и @sh синтаксис (известный как «Строка формата и экранирование») используется для обеспечения экранирующего форматирования оболочки POSIX sh на ценности.

флаг hr
По крайней мере, в jq-1.6 есть логическое значение `startswith()`, поэтому вы также можете сделать что-то вроде `.env | to_entries[] | select(.key | начинает с("aa_") | не) | ( .key + "=" + (.value | @sh))`
αғsнιη avatar
флаг cn
@steeldriver Я не думал, что у них может быть несколько функций для этого, кроме match(), capture() и test(); интересно! большое спасибо
флаг hr
tbh Я понял это только перед тем, как вы опубликовали, но я не придумал ничего более приятного, чем ваш `( .key + "=" + (.value | @sh))` для форматирования вывода

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.