如何在Terraform文件含dev的数组闭合方括号前添加指定字符串?
解决Terraform数组中在闭合方括号前添加新元素的问题
你之前用的sed命令是全局替换所有含dev的字符串,自然会在每个匹配项前插入内容,这不符合需求。下面提供两种精准实现的方法:
方法一:使用sed命令(直接修改文件)
利用sed的地址范围匹配,限定只在variable "dev_team"的代码块内操作,找到数组闭合方括号]并在其上方插入指定元素:
sed -i '/variable "dev_team"/,/]/ { /]/i\ "dev/hardware",' test.tf
命令解释:
/variable "dev_team"/,/]/:指定操作范围是从包含variable "dev_team"的行开始,到第一个出现]的行结束/]/i\ "dev/hardware",:在范围内匹配到]的行之前插入新元素,注意保持和数组内其他元素一致的缩进(4个空格)
方法二:使用awk命令(更灵活的文本处理)
如果需要更清晰的逻辑控制,awk也是不错的选择:
awk '/variable "dev_team"/ {flag=1} flag && /]/ {print " \"dev/hardware\","; flag=0} 1' test.tf > temp.tf && mv temp.tf test.tf
命令解释:
- 匹配到
variable "dev_team"时,开启标记flag=1,进入目标代码块的处理模式 - 当标记开启且匹配到
]时,先打印要添加的新元素,然后关闭标记flag=0 1表示打印所有行,最后通过临时文件替换原文件(避免直接修改时的文件损坏)
两种方法都能精准定位到dev_team数组的闭合方括号前,插入指定的"dev/hardware"元素,且不受数组最后一个原有元素内容的影响。
内容的提问来源于stack exchange,提问作者misteriuos
相关产品推荐
相关产品推荐

