vim正则表达式去重
:g/^\(.*\)$\n\1$/d这样可以去重,为什么这样是把重复的行只保留一行,而不是把所有的重复行都删掉(一条不剩)。例如111111222,处理后只有222。这样...
:g/^\(.*\)$\n\1$/d 这样可以去重,为什么这样是把重复的行只保留一行,而不是把所有的重复行都删掉(一条不剩)。例如 111 111 222,处理后只有222。这样的正则表达式怎么写?
展开
2个回答
展开全部
:g/^\(.*\)$\n\1$/d这条命令之所以会留下一条,是因为当匹配到相同行的最后一条,前面相同行已经全部被删除,最后一条所在的行已经成了“前不着村后不着店”,也就是前面匹配的条件就不成立了
下面一条语句可以"彻底"删除重复的行
:g/\(^.*$\n\)\{2,\}/d
下面一条语句可以"彻底"删除重复的行
:g/\(^.*$\n\)\{2,\}/d
追问
这个不仅删除重复的行其他有些非重复行也被删除了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
:%s/^\(.*\)\(\n\1\)\+$/\1/ge
用这个吧
g是把匹配的都删除了,当然就一条不剩了
如果你非想用g命令搞定的话,那也可以,
请看:
:%g/^\(.*\)\zs\(\n\1\)\+$/d
用这个吧
g是把匹配的都删除了,当然就一条不剩了
如果你非想用g命令搞定的话,那也可以,
请看:
:%g/^\(.*\)\zs\(\n\1\)\+$/d
追问
我想要的是把重复行都删掉,包括那条。例如 111 111 222,处理后只有222。
追答
%s/^\(.*\)\(\n\1\)\+\n//ge
这个能达到你的要求!
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询