【问题标题】:change variable values using sed command使用 sed 命令更改变量值
【发布时间】:2023-03-28 17:54:02
【问题描述】:

我在文件中有类似的内容,我想更改一些值

我的文件数据

variable "my_vnets" {
  default = {
    transit_vnet = {
      name       = "dummy"
      cidr       = "11.1.1.1.1."
      is_transit = false
    }
    spoke1_vnet = {
      name       = "dummy2"
      cidr       = "1.1.1.1.1"
      is_transit = false
    }
  }
}

预期输出

variable "my_vnets" {
  default = {
    transit_vnet = {
      name       = "NewName"
      cidr       = "11.1.1.1.1."
      is_transit = true
    }
    spoke1_vnet = {
      name       = "NewName2"
      cidr       = "2.2.2.2"
      is_transit = false
    }
  }
}

我正在尝试这样的事情,但没有运气

sed -i "s/\"my_vnets\" { default = \"""\" }/\"my_vnets\" { default = \""NewName"\" }/g"

【问题讨论】:

标签: bash unix sed


【解决方案1】:

一般而言,应避免使用结构无感知工具来编辑结构化文件。但是,如果没有用于解析和生成此格式的任何结构化工具,请考虑以下内容:

sed -r -e '/^[[:space:]]+name[[:space:]]+=/ { s/dummy/NewName/; }' \
       -e '/transit_vnet = [{]/,/[}]/       { s/is_transit = false/is_transit = true/; }'

...仅在以name = 开头的行上将dummy 替换为NewName;和is_transit = falseis_transit = true 仅在transit_vnet = { 匹配之后和} 匹配之前。

【讨论】:

  • 感谢先生的回复,有一个限制。例如,我想更改is_transit 的值,然后将更改由“is_transit”变量组成的整个文件。这就是为什么我需要具体到一个变量。
  • 我认为您的问题目前没有指定该约束——您的示例数据编辑 both 名称。
  • ...也就是说,在transit_vnet { 行和仅} 的下一行之间应用该编辑是否有效?
  • 我有`default = { transit_vnet = { name = "NewName" cidr = "11.1.1.1.1." is_transit = true }spoke1_vnet = { name = "NewName2" cidr = "2.2.2.2" is_transit = false }` 2 is_transit variables 。所以我只想改变其中一个
  • 查看编辑,仅在 transit_vnet 块内更改 is_transit
猜你喜欢
  • 2023-01-12
  • 2021-03-26
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
  • 2017-03-21
  • 2012-12-12
  • 2022-01-08
相关资源
最近更新 更多