15

This questionはすでに重複行を削除する方法を扱っていますが、リストが最初にソートされることを強制します.

uniq最初に並べ替えずに、連続した重複行の削除手順 (つまり) を実行したいと思います。

前の例:

Foo
Foo
Bar
Bar

後の例:

Foo
Bar
4

6 に答える 6

28

ここで解決策を見つけました。次の正規表現は正しく機能します。

g/^\(.*\)$\n\1$/d
于 2010-04-29T16:04:38.500 に答える
20
:%!uniq

あなたがUNIXシステムを使用している場合、またはuniqプログラムがあるシステムを使用している場合

于 2010-04-29T16:04:34.953 に答える
14

連続していない重複を削除したい場合は、使用できます

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

(行の最後のコピーを除くすべてを削除します)

どちらが変わるか

Foo
Bar
Foo
Bar
Foo
Baz
Foo
Quux

Bar
Baz
Foo
Quux

最初のコピー以外をすべて削除したい場合は、試してください

:g/^/m0
:g/^\(.*\)\ze\n\%(.*\n\)*\1$/d
:g/^/m0

どちらが変わるか

Foo
Bar
Foo
Bar
Foo
Baz
Foo
Quux

Foo
Bar
Baz
Quux
于 2010-04-30T16:49:48.387 に答える
3

連続する重複行を削除したいだけの場合は、何もソートせずに uniq を使用してください。

:%!uniq
于 2010-04-29T16:04:52.020 に答える
-1

これが古いことは知っていますが、並べ替えも気にしない場合は、次のことも言及する価値があります(OPがそれを避けたかったことは知っています):

:sort u
于 2016-10-03T06:34:25.730 に答える