首页 > 解决方案 > 遍历 awk 中的匹配值

问题描述

我正在尝试使用 bash 解析输入文件并将值从 'variable' 提取到 '}' ,但是我不确定如何遍历每个匹配的值并生成预期的输出。任何帮助表示赞赏。

测试.sh:

 #!/usr/bin/env bash
        
 file="./test.tf"
 output="$(awk '/variable/,/}/'  $file)"
 echo "$output

测试.tf:

 variable "policy_name1" {
      description = "abc xyz"
      type        = string
      default = [
        test1,
        test2,
      ]
    }
    
    variable "policy_name2" {
      description = "aaa xyz"
      type        = bool
      default     = false
    }

预期输出:

"policyname1","abc xyz","test1,test2"
"policy_name2","aaa xyz","false"

标签: bashawksedterraform

解决方案


Terraform 输入文件遵循 HCL 配置语言形式(参见https://github.com/hashicorp/hcl/blob/hcl2/hclsyntax/spec.md)。

该语言支持块、条件等。使用面向行的 awk 脚本无法正确解析这些文件。通过使用“terraform show -json”输出,您可能会获得更多里程。或者,尝试使用 设置环境变量TF_LOGexport TF_LOG=trace并查看输出


推荐阅读