繁体   English   中英

正则表达式删除除模式的最后一次出现以外的所有行

[英]Regex deleting all lines except last occurence of a pattern

我想删除所有与模式匹配但最后一次匹配的行。 因此,假设我们有以下文本:

test a 043
test a 123
test a 987 
test b 565

我想要的结果是:

test a 987 
test b 565

是否可以在vim中仅使用正则表达式来比较类似的字符串? 这也假设本例中的ab是动态的( (test\\s\\w\\s(.*) )。

为此,您将需要在vim中使用前瞻性正则表达式:

:g/\v(^test \w+)(\_.*\1)@=/d

正则表达式分解:

\v            # very magic to avoid escapes
(             # capturing group #1 start
   ^test \w+  # match any line starting with test \w+
)             # capturing group #1 end
(\_.*\1)@=    # positive lookahead to make sure there is at least one of \1 below

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM