如何使用Shell工具将扁平化YAML文件转换为标准嵌套结构?
YAML反扁平化Shell实现方案
方案1:使用yq工具(推荐,稳定兼容全场景)
yq是专门用于YAML处理的轻量命令行工具,主流Linux/macOS发行版均可直接通过软件源安装,单命令即可完成转换:
- 安装yq(v4及以上版本):
- Debian/Ubuntu:
apt install yq - macOS:
brew install yq
- Debian/Ubuntu:
- 执行转换命令:
yq -o yaml 'explode(.)' 输入扁平化文件.yml > 输出嵌套文件.yml
直接运行即可得到符合缩进要求的标准嵌套YAML,自动处理特殊字符、转义等边界场景。
方案2:纯Bash脚本实现(无额外依赖)
如果环境无法安装外部工具,可以使用下面的轻量Bash脚本,仅依赖系统自带的awk工具:
- 保存以下内容为
unflatten_yaml.sh:#!/bin/bash awk -F': ' ' { n = split($1, keys, /\./) for (i=1; i<=n; i++) { indent = "" for (j=1; j<i; j++) indent = indent " " if (i == n) { print indent keys[i] ": " $2 } else { key_path = "" for (k=1; k<=i; k++) key_path = key_path "." keys[k] if (!printed[key_path]) { print indent keys[i] ":" printed[key_path] = 1 } } } }' "$1"
- 给脚本加执行权限:
chmod +x unflatten_yaml.sh - 运行转换:
./unflatten_yaml.sh 输入扁平化文件.yml > 输出嵌套文件.yml
注意:该脚本适用于简单场景,值中不包含冒号、换行等特殊符号的情况,复杂YAML结构仍建议使用yq处理。
内容的提问来源于stack exchange,提问作者Krasimir Shontov
相关产品推荐
相关产品推荐

