自己实现shell 读写yaml文件的工具
90浏览 · 2024-02-05 20:14:22
如果你需要在自己的shell[脚本](https://geek.csdn.net/educolumn/093b3e5243538c1a64b04def9c71bb94?spm=1055.2569.3001.10083)中读写YAML格式的文件,可以使用yq工具。yq是一个命令行工具,可以让你轻松地读写YAML格式的文件。以下是使用yq读写YAML文件的示例。
读取YAML文件:
```bash
$ yq r example.yaml
写入YAML文件:
```bash
$ yq w -i example.yaml key value
其中,-i选项表示直接修改原始文件。如果你需要将数据写入新文件,可以使用以下命令:
```bash
$ yq w example.yaml key value > new.yaml
以上命令中,key是你要写入的键,value是你要写入的值。你可以根据需要使用嵌套键,例如:
```bash
$ yq w -i example.yaml parent.child.key value
这会在example.yaml文件中创建一个名为parent的[字典](https://geek.csdn.net/educolumn/ba94496e6cfa8630df5d047358ad9719?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6NDQ0MDg2MiwiZXhwIjoxNzA3MzcxOTM4LCJpYXQiOjE3MDY3NjcxMzgsInVzZXJuYW1lIjoid2VpeGluXzY4NjQ1NjQ1In0.RrTYEnMNYPC7AQdoij4SBb0kKEgHoyvF-bZOG2eGQvc&spm=1055.2569.3001.10083),其中包含一个名为child的[字典](https://geek.csdn.net/educolumn/ba94496e6cfa8630df5d047358ad9719?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6NDQ0MDg2MiwiZXhwIjoxNzA3MzcxOTM4LCJpYXQiOjE3MDY3NjcxMzgsInVzZXJuYW1lIjoid2VpeGluXzY4NjQ1NjQ1In0.RrTYEnMNYPC7AQdoij4SBb0kKEgHoyvF-bZOG2eGQvc&spm=1055.2569.3001.10083),该[字典](https://geek.csdn.net/educolumn/ba94496e6cfa8630df5d047358ad9719?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6NDQ0MDg2MiwiZXhwIjoxNzA3MzcxOTM4LCJpYXQiOjE3MDY3NjcxMzgsInVzZXJuYW1lIjoid2VpeGluXzY4NjQ1NjQ1In0.RrTYEnMNYPC7AQdoij4SBb0kKEgHoyvF-bZOG2eGQvc&spm=1055.2569.3001.10083)包含一个名为key的值为value的键值对。
除了yq之外,还有一些其他的YAML工具可供选择,例如python的PyYAML库和ruby的YAML库。这些工具可以让你在[脚本](https://geek.csdn.net/educolumn/093b3e5243538c1a64b04def9c71bb94?spm=1055.2569.3001.10083)中轻松地读写YAML文件。
相关问题
### 回答1:
在bash shell中读写YAML文件可以使用yq和jq这两个工具。其中,yq是一个基于Python的YAML处理工具,而jq是一个基于C语言的JSON处理工具,但它也支持YAML格式。
以下是一个使用yq和jq来读写YAML文件的bash脚本示例:
```bash
#!/bin/bash
# 读取yaml文件中的数据
name=$(yq r config.yaml name)
age=$(yq r config.yaml age)
echo "name: $name, age: $age"
# 修改yaml文件中的数据
yq w -i config.yaml name "new_name"
yq w -i config.yaml age 20
# 读取修改后的yaml文件中的数据
name=$(yq r config.yaml name)
age=$(yq r config.yaml age)
echo "name: $name, age: $age"
# 将yaml文件转换为json格式
jq '.' config.yaml > config.json
```