使用VI如何搜索和替换以下语句?

时间:2009-05-05 05:34:16

标签: regex vi

我需要更换以下内容:

CREATE TABLE /*!32312 IF NOT EXISTS*/ `access`

CREATE TABLE IF NOT EXISTS `access`

我试过

:%s/\/\*\!\d+(.*)\*\//\1/g

但似乎没有。我做错了什么?

3 个答案:

答案 0 :(得分:4)

vim需要反斜杠+(或使用*代替)。此外,您需要在vim中使用反斜杠分组括号。因此:

:%s/\/\*\!\d\+\(.*\)\*\//\1/g

是的,vim的老式posix regexes很糟糕:/

编辑:如下面的评论所述,+如果转义为\ +,则可以正常工作。并且\ d实际上是支持的,oops。编辑示例正则表达式以纠正此问题。另请参阅Brian Carper的示例,了解更简洁易读的版本。

答案 1 :(得分:4)

使用“非常神奇”,并使用默认值以外的分隔符,以便更容易阅读(并记住)。

:%s@\v/\*!\d+(.*)\*/@\1@g

如果没有“非常神奇”,你必须在+()前面加一个反斜杠(但不要在*或其他一些东西前面)。这不是很一致。

答案 2 :(得分:1)

使用[^ *] +稍微不同且效率更高: - )

1,$s/\v\/\*\!\d+\s*([^*]+)\*\//\1