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
2
3
4
5
6
database: 
host: localhost
port: 5432
user:
name: admin
password: secret
  1. 要读取数据库主机,你可以如下使用 yq
1
2
yq e '.database.host' config.yaml
>localhost
  1. 要在 config.yaml 中更新用户的名称,使用带 -i(就地)选项的 yq eval 命令:
1
yq e '.user.name = "newadmin"' -i config.yaml

用以下命令验证更改:

1
2
yq e '.user.name' config.yaml
> newadmin
  1. 要在数据库部分下添加一个新字段 timeout
1
yq e '.database.timeout = 30' -i config.yaml
  1. 要移除用户下的密码:
1
yq e 'del(.user.password)' -i config.yaml

此操作将从配置中删除密码字段。

记住,yq 是一款强大的工具,具有更多功能,包括将 YAML 转换为 JSON、合并文件,甚至更复杂的操作。请参考 yq 文档以进一步探索。

参考文章