![使用bash读取配置(具有嵌套配置)文件](https://linux22.com/image/214746/%E4%BD%BF%E7%94%A8bash%E8%AF%BB%E5%8F%96%E9%85%8D%E7%BD%AE%EF%BC%88%E5%85%B7%E6%9C%89%E5%B5%8C%E5%A5%97%E9%85%8D%E7%BD%AE%EF%BC%89%E6%96%87%E4%BB%B6.png)
我有一个.conf
文件,其中包含以下数据:
category1 {
Key1="value1"
Key2="value2"
}
如何在 bash 中读取这些值?
答案1
HCL 解析器可以读取您发布的数据。 HCL 是 HashiCorp 的结构化文档格式,用于配置文件(参见例如这里)。
有一些工具可用于将 HCL 转换为更常见的结构化格式,例如 JSON。其中一个这样的工具是yj
(来自https://github.com/sclevine/yj)。
$ cat file
category1 {
Key1="value1"
Key2="value2"
}
$ yj -cj <file
{"category1":[{"Key1":"value1","Key2":"value2"}]}
该-cj
选项可以yj
从 HCL 转换为 JSON(请参阅 参考资料yj -h
获取可用选项的完整列表)。
请注意,这会将部分yj
转换category1
为数组。如果输入 HCL 文件具有附加category1
部分,则附加部分将是数组中的另一个元素。
一旦采用 JSON 形式,我们就可以使用常用的 JSON 处理器jq
来提取我们需要的数据:
$ yj -cj <file | jq -r '.category1[0].Key1'
value1
该表达式挑选出与数组第一个元素中的键jq
对应的值。该选项确保我们从返回“原始数据”而不是 JSON 编码的带引号的字符串。Key1
category1
sr
jq
可以通过命令替换来提取到变量中:
$ val1=$(yj -cj <file | jq -r '.category1[0].Key1')
$ printf '1st value = %s\n' "$val1"
1st value = value1