在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
。