Shell脚本解析YAML数据
YAML语言简介
AML
是"YAML Ain't a Markup Language"(YAML
不是一种标记语言)的递归缩写。在开发的这种语言时,YAML
的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。
YAML
的语法和其他高级语言类似,
并且可以简单表达清单、散列表, 标量等数据形态。
它使用空白符号缩进和大量依赖外观的特色,
特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML
非常接近)。
YAML
常在Linux
作为一种配置文件出现,详细使用规则参考:YAML入门教程
Shell中解析YAML
在 Bash 中直接操作 YAML 需要一点创造性,因为 Bash 没有内置支持解析
YAML。然而,你可以使用外部工具,如
yq
(一个轻量级且便携的命令行 YAML 处理器),来高效地与 YAML
文件交互。
安装YAML解析器
1 | sudo pacman -S yq |
假设你有一个名为 config.yaml
的文件,内容如下:
1 | database: |
- 要读取数据库主机,你可以如下使用
yq
:
1 | yq e '.database.host' config.yaml |
- 要在
config.yaml
中更新用户的名称,使用带-i
(就地)选项的yq eval
命令:
1 | yq e '.user.name = "newadmin"' -i config.yaml |
用以下命令验证更改:
1 | yq e '.user.name' config.yaml |
- 要在数据库部分下添加一个新字段
timeout
:
1 | yq e '.database.timeout = 30' -i config.yaml |
- 要移除用户下的密码:
1 | yq e 'del(.user.password)' -i config.yaml |
此操作将从配置中删除密码字段。
记住,yq
是一款强大的工具,具有更多功能,包括将 YAML
转换为 JSON、合并文件,甚至更复杂的操作。请参考 yq
文档以进一步探索。