正则表达式删除除了模式的最后出现之外的所有行

时间:2015-12-04 20:47:09

标签: regex vim

我想删除与模式匹配但最后一次出现的所有行。 所以假设我们有这样的文字:

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

我瞄准的结果是:

test a 987 
test b 565

是否有可能在vim中只使用正则表达式来比较这样的字符串?这也假设此示例中的ab是动态的((test\s\w\s(.*))。

1 个答案:

答案 0 :(得分:4)

你需要在vim中使用前瞻性正则表达式:

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

RegEx分手:

\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