在vi中删除重复的行?

我有一个文本文件,其中包含一个长长的条目列表(每行一个)。 其中一些是重复的,我想知道是否有可能(如果是这样,如何)删除任何重复。 如果可能的话,我有兴趣从vi / vim开始做这个工作。

如果您可以对文件进行sorting,则可以使用:

:sort u 

尝试这个:
:%s/^\(.*\)\n\1$/\1/

在尝试之前先制作一个副本。 这是未经testing的。

从命令行只是做:

 sort file | uniq > file.new 

我将结合上面的两个答案:

 go to head of file sort the whole file remove duplicate entries with uniq 1G !Gsort 1G !Guniq 

如果你有兴趣看到有多less重复的行被删除,请使用前后的control-G来检查缓冲区中存在的行数。

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

适用于Windows。 行必须首先sorting。

awk '!x[$0]++' yourfile.txt如果你想保持顺序(即sorting是不可接受的)。 为了从vim调用它, :! 可以使用。

select视线模式下的行( Shift + v ),然后:!uniq 。 那只会抓到一个又一个来的重复。

关于如何在VimL中实现Uniq,可以在我要维护的插件中searchUniq。 你会看到在Vim邮件列表上给出的各种实现方法。

否则, :sort u确实是要走的路。

 :%s/^\(.*\)\(\n\1\)\+$/\1/gec 

要么

 :%s/^\(.*\)\(\n\1\)\+$/\1/ge 

这是我的答案,它可以删除多个重复行,只保留一个不删除!

我会使用!}uniq ,但只有在没有空行的情况下才有效。

对于文件中的每一行使用:1,$!uniq