vim正则表达式去重

:g/^\(.*\)$\n\1$/d这样可以去重,为什么这样是把重复的行只保留一行,而不是把所有的重复行都删掉(一条不剩)。例如111111222,处理后只有222。这样... :g/^\(.*\)$\n\1$/d 这样可以去重,为什么这样是把重复的行只保留一行,而不是把所有的重复行都删掉(一条不剩)。例如 111 111 222,处理后只有222。这样的正则表达式怎么写? 展开
 我来答
百度网友4706d78
2014-04-28 · TA获得超过563个赞
知道小有建树答主
回答量:407
采纳率:50%
帮助的人:328万
展开全部
:g/^\(.*\)$\n\1$/d这条命令之所以会留下一条,是因为当匹配到相同行的最后一条,前面相同行已经全部被删除,最后一条所在的行已经成了“前不着村后不着店”,也就是前面匹配的条件就不成立了
下面一条语句可以"彻底"删除重复的行

:g/\(^.*$\n\)\{2,\}/d
追问
这个不仅删除重复的行其他有些非重复行也被删除了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tw250
2014-04-28 · TA获得超过1134个赞
知道小有建树答主
回答量:185
采纳率:100%
帮助的人:50.1万
展开全部
:%s/^\(.*\)\(\n\1\)\+$/\1/ge

用这个吧
g是把匹配的都删除了,当然就一条不剩了

如果你非想用g命令搞定的话,那也可以,
请看:
:%g/^\(.*\)\zs\(\n\1\)\+$/d
追问
我想要的是把重复行都删掉,包括那条。例如 111 111 222,处理后只有222。
追答
%s/^\(.*\)\(\n\1\)\+\n//ge
这个能达到你的要求!
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式