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

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/

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值