如何从外壳获取YAML文件中关键图像下的值的内容

时间:2018-10-12 14:05:10

标签: shell yaml

像这样的YAML文件:

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

如何通过shell获得以下内容?

emas_fe_weex: 20170810-ed0b13f
eweex_basic_manager: 20150109-e0fafa3

3 个答案:

答案 0 :(得分:2)

最好使用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

答案 1 :(得分:1)

我同意Anthon的观点:YAML非常复杂,需要使用YAML解析器(例如XML,JSON,CSV等)

以下是一些其他脚本语言示例,具体取决于您的喜好:

  1. Ruby

    exclude-pods.json
  2. Perl(需要CPAN的YAML :: XS)

    ruby -ryaml -e '
        data = YAML.load($stdin)
        puts YAML.dump(data["http"]["images"])
    ' < file.yaml
    
  3. Tcl(需要tcllib)

    perl -MYAML::XS -0777 -nE '
        $data = Load($_);
        say Dump($data->{http}{images})
    '  < file.yaml
    

答案 2 :(得分:0)

如果您正在使用grep可用的系统,则可以同时使用它们。假设数据位于名为http.yaml的文件中:

grep -e emas_fe_weex -e eweex_basic_manager http.yaml