如何在Go中向文件指定注释前追加内容并动态添加元素?
解决方案
一、命令行脚本快速修改(适合一次性/批量修改文件)
如果需要直接修改现有Terraform文件的结构,可以用sed命令自动给最后一个元素补逗号,并在指定注释前插入新元素:
单次执行命令(以添加"e"为例)
# Mac系统 sed -i '' -e '/\/\/add more text before this/{x;p;x;s/^ "d"$/ "d",/;}' -e '/\/\/add more text before this/i\ "e"' your_file.tf # Linux系统 sed -i -e '/\/\/add more text before this/{x;p;x;s/^ "d"$/ "d",/;}' -e '/\/\/add more text before this/i\ "e"' your_file.tf
封装成可复用脚本
如果未来要多次添加元素,写一个Shell脚本add_list_item.sh更方便:
#!/bin/bash # 参数说明:第一个是要添加的字符串,第二个是目标文件路径 NEW_ITEM="$1" TARGET_FILE="$2" # 给列表最后一个现有元素(示例中的"d")补逗号 sed -i '' -e '/\/\/add more text before this/{x;s/^\(.*\)"d"$/\1"d",/;x;}' "$TARGET_FILE" # 在指定注释前插入新元素 sed -i '' -e "/\/\/add more text before this/i\ \"$NEW_ITEM\"" "$TARGET_FILE"
使用时直接执行:
# 添加"e"到目标文件 ./add_list_item.sh "e" your_file.tf # 后续添加"f"只需修改参数 ./add_list_item.sh "f" your_file.tf
二、Terraform原生优雅方案(推荐长期动态管理)
手动改文件容易出错,更推荐用Terraform的列表拼接功能,拆分基础列表和扩展列表,未来加元素完全不用动原有结构:
修改后的文件结构:
locals { # 基础固定元素区 BASE_LIST = [ "a", "b", "c", "d" ] # 扩展元素区:直接在这里加新元素就行 EXTENDED_LIST = [ "e", "f", // 继续添加更多元素 ] # 最终合并后的列表,替代原来的MY_LIST MY_LIST = concat(local.BASE_LIST, local.EXTENDED_LIST) }
以后新增元素,只需要在EXTENDED_LIST里追加,不用管逗号、注释位置,Terraform会自动处理列表合并。
内容的提问来源于stack exchange,提问作者Gal Yakir
相关产品推荐
相关产品推荐

