如何从Linux Shell脚本解析YAML文件?

我希望提供一个结构化的配置文件,对于非技术用户而言,该文件应尽可能地容易编辑(不幸的是,该文件必须是文件),因此我想使用YAML。但是,我找不到从Unix Shell脚本解析此内容的任何方法。



蝴蝶刀刀
浏览 6149回答 3
3回答

呼唤远方

我的用例可能与原始帖子所要求的完全相同,但肯定是相似的。我需要引入一些YAML作为bash变量。YAML永远不会超过一个层次。YAML看起来像这样:KEY:                valueANOTHER_KEY:        another_valueOH_MY_SO_MANY_KEYS: yet_another_valueLAST_KEY:           last_value输出像一个dis:KEY="value"ANOTHER_KEY="another_value"OH_MY_SO_MANY_KEYS="yet_another_value"LAST_KEY="last_value"我通过这一行实现了输出:sed -e 's/:[^:\/\/]/="/g;s/$/"/g;s/ *=/=/g' file.yaml > file.shs/:[^:\/\/]/="/g查找:并替换为=",而忽略://(对于URL)s/$/"/g追加"到每行的末尾s/ *=/=/g 删除所有空格 =

侃侃无极

我已经用shyamlPython 编写了Shell命令行中的YAML查询需求。概述:$ pip install shyaml&nbsp; &nbsp; &nbsp; ## installation示例的YAML文件(具有复杂功能):$ cat <<EOF > test.yamlname: "MyName !!"subvalue:&nbsp; &nbsp; how-much: 1.1&nbsp; &nbsp; things:&nbsp; &nbsp; &nbsp; &nbsp; - first&nbsp; &nbsp; &nbsp; &nbsp; - second&nbsp; &nbsp; &nbsp; &nbsp; - third&nbsp; &nbsp; other-things: [a, b, c]&nbsp; &nbsp; maintainer: "Valentin Lab"&nbsp; &nbsp; description: |&nbsp; &nbsp; &nbsp; &nbsp; Multiline description:&nbsp; &nbsp; &nbsp; &nbsp; Line 1&nbsp; &nbsp; &nbsp; &nbsp; Line 2EOF基本查询:$ cat test.yaml | shyaml get-value subvalue.maintainerValentin Lab对复杂值的更复杂的循环查询:$ cat test.yaml | shyaml values-0 | \&nbsp; while read -r -d $'\0' value; do&nbsp; &nbsp; &nbsp; echo "RECEIVED: '$value'"&nbsp; doneRECEIVED: '1.1'RECEIVED: '- first- second- third'RECEIVED: '2'RECEIVED: 'Valentin Lab'RECEIVED: 'Multiline description:Line 1Line 2'一些要点:正确处理了所有YAML类型和语法奇数,如多行,带引号的字符串,内联序列...\0 填充输出可用于可靠的多行输入操作。简单的点分符号来选择子值(即:subvalue.maintainer是有效键)。提供对序列的索引访问(即:subvalue.things.-1是序列的最后一个元素subvalue.things。)一次性访问所有序列/结构元素,以用于bash循环。您可以将YAML文件的整个子部分输出为... YAML,可以很好地融合以便进一步使用shyaml。shyaml github页面或shyaml PyPI页面上提供了更多示例和文档。
打开App,查看更多内容
随时随地看视频慕课网APP