VIM 去除重复行

Fra*_*ron 4 vim

我有一个关于使用 VIM 编辑字符串的问题,我目前有以下字符串:

红狐狸。

红狐狸。

蓝色的鱼。

蓝色的鱼。

问题:如何删除重复项?假设我至少有 500 行重复

预期结果:

红狐狸。

蓝色的鱼。

svl*_*sov 8

如果您不想对行进行排序:

:g/^\(.*\)$\n\1/d
Run Code Online (Sandbox Code Playgroud)

解释:

:g/^\(.*\)$\n\1/d
 g/            /d   # Delete the lines matching the regexp
   ^\(.*\)$         # Match a whole line and put it in substitution register 1
           \n\1     # Match substitution register 1 preceded by new line
Run Code Online (Sandbox Code Playgroud)

  • @iuvbio 如果_紧接其后_的一行相同,则该正则表达式将删除一行。如果您有能力对结果进行排序,请选择[其他答案(Peter's)](/sf/answers/2059288521/)。如果您仍然不能,那么您将需要一些更聪明的东西(脚本)来解析文件并在文件通过时保留唯一的条目。当然,这可以在 Vim 中完成,但 Python 中的第一个近似可能如下所示: `python -c "uniq = []; [uniq.append(l) for l in open('test_file.txt') if l not在uniq];打印(uniq)“`。请注意“not in”检查效率不高。 (2认同)

Pet*_*den 7

如果您不需要保留行的顺序,您可以执行以下操作:

:sort u
Run Code Online (Sandbox Code Playgroud)

即排序所有行并删除重复项。