使用bash读取配置(具有嵌套配置)文件

使用bash读取配置(具有嵌套配置)文件

我有一个.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 编码的带引号的字符串。Key1category1srjq

可以通过命令替换来提取到变量中:

$ val1=$(yj -cj <file | jq -r '.category1[0].Key1')
$ printf '1st value = %s\n' "$val1"
1st value = value1

相关内容