Search code examples
shellyaml

How can I parse a YAML file from a Linux shell script?


I wish to provide a structured configuration file which is as easy as possible for a non-technical user to edit (unfortunately it has to be a file) and so I wanted to use YAML. I can't find any way of parsing this from a Unix shell script however.


Solution

  • My use case may or may not be quite the same as what this original post was asking, but it's definitely similar.

    I need to pull in some YAML as bash variables. The YAML will never be more than one level deep.

    YAML looks like so:

    KEY:                value
    ANOTHER_KEY:        another_value
    OH_MY_SO_MANY_KEYS: yet_another_value
    LAST_KEY:           last_value
    

    Output like-a dis:

    KEY="value"
    ANOTHER_KEY="another_value"
    OH_MY_SO_MANY_KEYS="yet_another_value"
    LAST_KEY="last_value"
    

    I achieved the output with this line:

    sed -e 's/:[^:\/\/]/="/g;s/$/"/g;s/ *=/=/g' file.yaml > file.sh
    
    • s/:[^:\/\/]/="/g finds : and replaces it with =", while ignoring :// (for URLs)
    • s/$/"/g appends " to the end of each line
    • s/ *=/=/g removes all spaces before =