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
withis_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}`2is_transit
变量。因此我只想更改其中一个变量。请参见编辑,更改is_transit
仅在transit\vnet
块内。这是否回答了您的问题?@Lenna,这不是JSON。