Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 使用sed命令更改变量值_Bash_Unix_Sed - Fatal编程技术网

Bash 使用sed命令更改变量值

Bash 使用sed命令更改变量值,bash,unix,sed,Bash,Unix,Sed,我在文件中有类似的内容,我想更改一些值 我的文件数据 variable "my_vnets" { default = { transit_vnet = { name = "dummy" cidr = "11.1.1.1.1." is_transit = false } spoke1_vnet = { name = "

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

我的文件数据

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"
通常,应避免使用不了解结构的工具来编辑结构化文件。但是,如果没有任何结构化的工具来解析和生成这种格式,请考虑类似:

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

…仅在以
name=
开头的行上,将
dummy
替换为
NewName
;和
is_transit=false
with
is_transit=true
仅在匹配
transit\u vnet={
之后和匹配
}

之前感谢您的回复,先生,有一个限制。例如,我想更改
is_transit
值,那么包含“is_transit”变量的整个文件都将更改。这就是为什么我需要特定于一个变量。我认为你的问题目前没有指定约束条件——你的样本数据编辑两个名称……也就是说,在
transit\u vnet{
行和下一行之间只使用
}
进行编辑是否有效?我有“default={transit\u 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
变量。因此我只想更改其中一个变量。请参见编辑,更改
is_transit
仅在
transit\vnet
块内。这是否回答了您的问题?@Lenna,这不是JSON。