vim:删除所有行但唯一的?

7nu*_*ull 5 vim gvim macros

我正在 VIM 中寻找一种方法来删除所有重复的行,并且只留下文件中存在的唯一行。我更喜欢宏,但命令或函数会很棒。

假设我有一个包含重复行和一些独特之处的文件:

1Apple
1Apple
2Peach
2Peach
2Peach
3Beer
4Banana
4Banana
4Banana
Run Code Online (Sandbox Code Playgroud)

我想删除所有行,以便剩下的所有内容:

3Beer
Run Code Online (Sandbox Code Playgroud)

我非常想要的一条独特的线。

我一直使用 sort u 通过删除重复项来获取唯一列表,但有时我只需要文件中的唯一行。

任何想法如何在 VIM 中处理这种情况?

Tho*_*hor 6

您可以使用替换命令和反向引用来执行此操作:

s/^\(.*\)\(\n\1\)\+//
Run Code Online (Sandbox Code Playgroud)

请注意,这仅适用于对行进行排序的情况。这是通过在下一行匹配和删除第一组一次或多次来实现的。


dav*_*dgo 5

您可以使用“uniq”命令来执行此操作 -

uniq -u 要检查的文件名.txt

  • `:%!排序 | uniq -u` 会这样做:排序,删除所有不唯一的行,并将结果保留在文件中。 (3认同)