在vi中换人

时间:2013-11-26 11:59:32

标签: vi

我在

形式的vi中有行
any_string($mno,"<anything here>",$log);
run_abc_cmd($mno,"<anything here>",$log);

我需要将上面的代码替换为

any_string($mno,"<anything here>",$log);    
run_abc_cmd($mno,"<anything here>",$log,"",10);

给这样的东西

:%s/\$log\);/\$log,\"\",10\);/g

无法解决我的目的。我在这里需要的是将特定模式替换为仅包含特定模式的行(在上述情况下为run_abc_cmd)。我可以用vi中的替换来做这个吗?

2 个答案:

答案 0 :(得分:2)

这个怎么样:

:%s/^\(\s*run_abc_cmd([^)]*\)/\1,"",10/g

要解释一下,正则表达式\(captures\)任何以任意数量的空白字符开头的行(^)后跟run_abc_cmd(直到结束括号。替换为\1:对已捕获部分的引用;然后是你想要添加的额外位。

答案 1 :(得分:0)

:%s/^run_abc_cmd.*,$log/&,"",10/

&安培;优于\ 1,因为它允许不使用\(和\)。

请注意

:/^run_abc_cmd/s/,$log/&,"",10/

仅在/ bin / vi中使用时选择第一个匹配行(但它选择/ bin / sed和/ bin / ed中的所有匹配行)。