![](/img/trans.png)
[英]Regular Expression to match variable number of works with fixed prefix and suffix
[英]Vim regular expression to match string with prefix and suffix
我想在vim中搜索以“abc”开头并以“xyz”结尾的字符串。
以下是我尝试过的命令:
:1,$g/abc[\w\W]*xyz/
:1,$g/abc\[\\w\\W\]\*xyz/
:1,$g/abc*xyz/
"[\\w\\W]*" 表示 "abc" 和 "xyz" 之间的文本可以是任意字符
"1,$" 表示查找范围是vim打开的文件的第一行到最后一行。
我发现搜索模式
abc[\w\W]*xyz
为什么它在 vim 中失败?
除非“任何字符”对您的意义与对 Vim 的意义不同,否则下面的命令应该可以工作:
:g/abc.*xyz
.
表示“除 EOL 之外的任何字符”。*
表示“前一个原子的任意数量(包括 0)”。1,$
可以缩短为%
。:global
默认适用于整个缓冲区,因此您甚至不需要%
。:g/pattern
的命令(如:g/foo/d
则不需要关闭/
。一旦文件变得太大(比如 1GB),":g/abc.*xyz" 就会变得很慢。
我找到
cat fileName | grep abc | grep xyz >> searchResult.txt
比在 vim 中使用搜索功能更有效。
我知道此方法可能会返回以“xyz”开头并以“abc”结尾的行。
但是由于这在我的文件中是很少见的情况(也许其他人不会经常发生这种情况),我想我应该在这里写这个方法。
似乎在集合语法[..]
,不能使用诸如 \\w 之类的字符类,可能是因为它通过逐字符策略进行测试。 从:h /[]
:
与集合匹配可能很慢,因为文本中的每个字符都必须与集合中的每个字符进行比较。 尽可能使用上述其他原子之一。 示例:“\\d”比“[0-9]”快得多并且匹配相同的字符。
但是,您可以使用专门为[..]
语法准备的类似功能。 再次来自:h /[]
:
字符类表达式被评估为属于该字符类的字符集。
例子包括:
[:alnum:] letters and digits
[:alpha:] letters
[:blank:] space and tab characters
[:cntrl:] control characters
[:digit:] decimal digits
[:graph:] printable characters excluding space
[:lower:] lowercase letters
如果你想一一找到你可以点击
/
然后写
abc.*xyz
并按 Enter 找到该模式的第一次出现。 然后使用n
表示下一次出现,使用Shift + n
表示前一次出现。 这就是我通常的做法,因为对我来说,修改这些行更容易。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.