【问题标题】:How to use `yq` to select key-value pairs and format them into "$key=$value" style outputs?如何使用 `yq` 选择键值对并将它们格式化为 \"$key=$value\" 样式输出?
【发布时间】:2022-08-21 16:47:32
【问题描述】:

假设我有如下所示的 YAML 文件:

FOO: somefoo
BAR: somebar

我想将此(使用yq)转换为以下内容,以便我可以将内容导入环境变量:

export BAR=\'somebar\'
export FOO=\'somefoo\'

我可以通过首先将输入转换为 JSON 来使用 jq 来做到这一点,但我似乎无法弄清楚如何仅使用 yq 来做到这一点。 (我正在使用yq 4.x,<4.18)。

那么,具体来说,我如何仅使用yq 来执行以下操作?

INPUT=\"FOO: somefoo
BAR: somebar\"

echo \"$INPUT\" | yq e \'to_json\' - | jq -r \'keys[] as $k | \"export \\($k)=\'\\\'\'\\(.[$k])\'\\\'\'\"\'
  • 这对于现有的 Go yq 结构是不可能的

标签: bash jq yq


【解决方案1】:

您可以切换到 kislyuk 的 yq,它在后台使用原生 jq。然后,您只需要to_entries 来访问键和值,string interpolation 结合-r 标志来生成输出,以及@sh 转义以符合shell:

yq -r 'to_entries[] | "export \(.key)=\(.value | @sh)"'
export FOO='somefoo'
export BAR='somebar'

【讨论】:

    【解决方案2】:

    使用 key 运算符和字符串连接:

    $ echo "$INPUT" | yq '.[] | "export " + key + "=" + .'
    export FOO=somefoo
    export BAR=somebar
    

    yq 4.27.2 测试

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-10
      • 2014-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-28
      • 1970-01-01
      相关资源
      最近更新 更多