如何使用替换命令更改模式中间的某些内容?

时间:2012-04-02 11:58:28

标签: vim sed

我的情况如下:

我在myStuffDoSomething类型中有一堆函数和声明,我想将其重命名为myStuff_DoSomething,其中DoSomething可以是任何单词。并且他们中的一些人有可能像这样写出来。

我可以使用s/myStuff[^_]/&_/g,但这会以myStuffD_oSomething结尾,将下划线放在错误的位置。

注意:我在标签中添加了sed,因为命令替换符的语法与sed类似(如果不相同)。

3 个答案:

答案 0 :(得分:4)

如果名称已包含_,只要前缀始终为myStuff,您就可以使用s/myStuff\zs_\?/_/g。 这样,现有的_将不会加倍,但会插入一个不存在的{。}。

编辑:使用\zs令牌删除评论中Randy Morris指出的重复项。

答案 1 :(得分:2)

这可能对您有用:

echo myStuffDoSomething | sed 's/\(myStuff\)\([^_]\)/\1_\2/'
myStuff_DoSomething

答案 2 :(得分:2)

这就是我要做的事情:

%s/\(myStuff\)_*/\1_