我在
形式的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中的替换来做这个吗?
答案 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中的所有匹配行)。