3 回答
TA贡献1856条经验 获得超11个赞
我的用例可能与原始帖子所要求的完全相同,但肯定是相似的。
我需要引入一些YAML作为bash变量。YAML永远不会超过一个层次。
YAML看起来像这样:
KEY: value
ANOTHER_KEY: another_value
OH_MY_SO_MANY_KEYS: yet_another_value
LAST_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.sh
s/:[^:\/\/]/="/g查找:并替换为=",而忽略://(对于URL)
s/$/"/g追加"到每行的末尾
s/ *=/=/g 删除所有空格 =
TA贡献2051条经验 获得超10个赞
我已经用shyamlPython 编写了Shell命令行中的YAML查询需求。
概述:
$ pip install shyaml ## installation
示例的YAML文件(具有复杂功能):
$ cat <<EOF > test.yaml
name: "MyName !!"
subvalue:
how-much: 1.1
things:
- first
- second
- third
other-things: [a, b, c]
maintainer: "Valentin Lab"
description: |
Multiline description:
Line 1
Line 2
EOF
基本查询:
$ cat test.yaml | shyaml get-value subvalue.maintainer
Valentin Lab
对复杂值的更复杂的循环查询:
$ cat test.yaml | shyaml values-0 | \
while read -r -d $'\0' value; do
echo "RECEIVED: '$value'"
done
RECEIVED: '1.1'
RECEIVED: '- first
- second
- third'
RECEIVED: '2'
RECEIVED: 'Valentin Lab'
RECEIVED: 'Multiline description:
Line 1
Line 2'
一些要点:
正确处理了所有YAML类型和语法奇数,如多行,带引号的字符串,内联序列...
\0 填充输出可用于可靠的多行输入操作。
简单的点分符号来选择子值(即:subvalue.maintainer是有效键)。
提供对序列的索引访问(即:subvalue.things.-1是序列的最后一个元素subvalue.things。)
一次性访问所有序列/结构元素,以用于bash循环。
您可以将YAML文件的整个子部分输出为... YAML,可以很好地融合以便进一步使用shyaml。
shyaml github页面或shyaml PyPI页面上提供了更多示例和文档。
- 3 回答
- 0 关注
- 6148 浏览
添加回答
举报