您的位置:首页 > 其它

vim 删除文本文件中的重复行

2014-04-04 12:56 981 查看

vim之删除重复行  

2012-09-20 23:23:49|  分类:

Linux/Unix |举报
|字号 订阅

在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\{-}{//

转自:http://blog.163.com/lgh_2002/blog/static/440175262012820112349967/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: