注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

牧笔临风

己有能,勿自私!

 
 
 

日志

 
 
 
 

vim之删除重复行  

2015-01-07 13:51:36|  分类: vim |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
转自:http://www.blogdaren.com/post-1303.html

在Vim中删除重复的行很常见,通常有两种情况:

一、重复行紧挨着

– 删除连续相同的行,保留最后一行

:g/^\(.*\)$\n\1$/d 

– 删除连续相同的行,保留最开始一行

:g/\%(^\1$\n\)\@<=\(.*\)$/d

      上面这两个命令在处理连续相同行时作用相同,但是下面全文搜索重复行删除时区别是保留前面的还是后面的重复行。

– 类似的,删除连续多个空行,只保留一行空行

g/^\s*$\n\s*$/d 

二、重复行不挨着

– 删除重复行,结果不要求按原顺序

:sort u

– 删除重复行,结果按照原顺序排列(这个有点麻烦)

1. 为了保存原有顺序,首先给每行加上行号和1个{

:let i=1|g/^/s//\=i.'{'/|let i+=1

2. 按照行号后面的内容排序,参考:help :sort

:sort /^\d\{-}{/ 

3. 删除行号后面的内容相同的行

保留后面的行:g/^\d\{-}{\(.*\)$\n\d\{-}{\1$/d 

或者保留开始的行:g/\%(^\d\{-}{\1$\n\)\@<=\d\{-}{\(.*\)$/d 

4. 按照行号恢复顺序

:sort n

5. 删除行首的原来的行号和{

:%s/\d\{-}{//
  评论这张
 
阅读(52)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017