在 Vim 中匹配所有包含一个字符串后跟一个点,后跟两个字母的字符串?

在 Vim 中匹配所有包含一个字符串后跟一个点,后跟两个字母的字符串?

例如,我们有一个包含各种域名的文件,大约有 800 行。我们想使用 vim 快速查找所有以 www.example.** 开头的域名,其中 ** 是任何类型的 2 个字母。

example.site"
example.link]"
example.example'
example.ex'
example.xx]"'

现在我们可以在 vim 中使用 term 进行搜索example.,但是我们如何使用通配符来匹配,以便我们可以 example.ex' and example.xx]"在上面的示例中找到?

我们不想像这样突出显示字符串

> example.site" 
> example.link]" 
> example.example'

只是example.ex and example.xx (如果我们可以删除所有其他字符串并保留唯一匹配的字符串,那就更好了)

答案1

你可以使用:

/example\.\w\w\W

搜索“示例”。后跟两个“单词字符” \w,然后是“非单词字符”\W

要删除与模式不匹配的所有行,您可以执行以下操作:

:v/example\.\w\w\W/delete

要不就:

:v/example\.\w\w\W/d

或者使用带否定的 g[lobal] 命令!

:g!/example\.\w\w\W/d

上述 3 个命令都会变成这样:

example.site"
example.link]"
example.example'
example.ex'
example.xx]"'

进入这个:

example.ex'
example.xx]"'

更新

为了处理这些模式位于同一行的情况,如下所示:

example.site"
example.example' example.ex' example.link]"
example.xx]"'

您可以使用如下搜索模式:

/example\.\w\w\w[^ ]* \?

其工作原理是找到“例子”。后跟三个“单词字符”,后跟任意数量的字符不是空格[^ ]*并以可选空格结尾\?

因此,您可以将匹配项替换为空(这g意味着将替换应用于该行中的每个匹配项,而不仅仅是它找到的第一个匹配项):

:%s/example\.\w\w\w[^ ]* \?//g

要得到:


example.ex' 
example.xx]"'

(您还可以使用 删除空行:g/^$/d。事实上,您可以使用 将其链接在一起|并使用 完成所有操作:%s/example\.\w\w\w[^ ]* \?//g | %g/^$/d

相关内容