在bash中,如何快速替换文件中的数字?

在bash中,如何快速替换文件中的数字?

我的 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_countgreen_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/ s0用您的替代品替换

答案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

相关内容