Как я могу получить содержимое значений по ключевым изображениям в файле YAML из оболочки - PullRequest
0 голосов
/ 12 октября 2018

YAML файл выглядит так:

http:
  Domain: {{ environment.domains.httpport }} 
  images:
    emas_fe_weex: 20170810-ed0b13f
    eweex_basic_manager: 20150109-e0fafa3
  replicaCount:
    xxxx: 1
  resources:
    {}

Как я могу получить следующее с оболочкой?

emas_fe_weex: 20170810-ed0b13f
eweex_basic_manager: 20150109-e0fafa3

Ответы [ 3 ]

0 голосов
/ 12 октября 2018

Лучше всего обрабатывать YAML с помощью синтаксического анализатора YAML, например, с Python и ruamel.yaml (отказ от ответственности: я являюсь автором этого пакета).При вводе в input.yaml:

< input.yaml python -c "import sys, ruamel.yaml; yaml=ruamel.yaml.YAML(); yaml.dump(yaml.load(sys.stdin)['http']['images'], sys.stdout)"

будет выводиться:

emas_fe_weex: 20170810-ed0b13f
eweex_basic_manager: 20150109-e0fafa3
0 голосов
/ 12 октября 2018

Я согласен с Anthon: YAML достаточно сложен, чтобы требовать использования синтаксического анализатора YAML (например, XML, JSON, CSV и т. Д.)

Вот несколько примеров с другими языками сценариев, в зависимости от вашего вкуса:

  1. Рубин

    ruby -ryaml -e '
        data = YAML.load($stdin)
        puts YAML.dump(data["http"]["images"])
    ' < file.yaml
    
  2. Perl (требуется YAML :: XS от CPAN)

    perl -MYAML::XS -0777 -nE '
        $data = Load($_);
        say Dump($data->{http}{images})
    '  < file.yaml
    
  3. Tcl (требуется tcllib)

    echo '
        package require yaml
        set data [yaml::yaml2dict -file "file.yaml"]
        puts [yaml::dict2yaml [dict get $data http images]]
    ' | tclsh
    
0 голосов
/ 12 октября 2018

Если вы используете систему, в которой доступна grep, вы можете получить их вместе с ней.Предполагая, что данные находятся в файле с именем http.yaml:

grep -e emas_fe_weex -e eweex_basic_manager http.yaml
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...