Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1738447
  • 博文数量: 410
  • 博客积分: 9563
  • 博客等级: 中将
  • 技术积分: 4517
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-03 19:59
个人简介

文章分类

全部博文(410)

文章存档

2017年(6)

2016年(1)

2015年(3)

2014年(4)

2013年(32)

2012年(45)

2011年(179)

2010年(140)

分类: LINUX

2011-07-31 12:50:16

在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\{-}{//
阅读(5243) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~