我的 terraform tf 文件,一行有:
green_nodes_asg_instance_count = 0
我想用$blue_nodes_asg_instance_count
=替换它3
,结果应该是:
green_nodes_asg_instance_count = 3
我尝试过这个但不起作用:
sed -i 's/\(.*\)green_nodes_asg_instance_count\(.*\)=\(.*\)0/\1green_nodes_asg_instance_count\2=\3\$blue_nodes_asg_instance_count/g' test.tf
答案1
\(.*\)
在模式的开头包含它只是为了替换它本身是没有用的。- 第二组和第三组也同样如此。你自己替换它们
- 您还可以替换
green_nodes_asg_instance_count
为green_nodes_asg_instance_count
.再次不是很有帮助
如果你想转
green_nodes_asg_instance_count = 0
进入
green_nodes_asg_instance_count = 3
0
然后除了with之外什么都不改变
sed '/green_nodes_asg_instance_count *= *0/s/0/3/' test.tf
/green_nodes_asg_instance_count *= *0/
是一个地址,这意味着以下命令仅在与正则表达式匹配的行上执行。我*
在空格后面添加了任意数量的空格s/0/3/
s
0
用您的替代品替换
答案2
我会做:
perl -pi -e 's{\bgreen_nodes_asg_instance_count\s*=\s*\K.*}{3}' your-file
更改green_nodes_asg_instance_count<optional-whitespace>=<optional-whitespace>
to之后的所有内容3
(并且前提是它不跟随单词字符,以避免将其替换为olive_green_nodes_asg_instance_count = 123
例如)。
这应该比使用非标准-i
扩展(支持它的实现之间的行为不兼容)更可移植,并且意味着您可以使用比默认 BREsed
更高级的 PCRE 。sed