141

エントリの長いリスト (各行に 1 つ) を含むテキスト ファイルがあります。これらのいくつかは重複しており、重複を削除できるかどうか (可能であればその方法) を知りたいです。可能であれば、vi/vim 内からこれを行うことに興味があります。

4

14 に答える 14

317

ファイルの並べ替えに問題がない場合は、次を使用できます。

:sort u
于 2008-12-08T22:32:20.753 に答える
32

これを試して:

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

それは、それ自体の 1 つ以上のコピーが直後に続く任意の行を検索し、それを 1 つのコピーに置き換えます。

ただし、試す前にファイルのコピーを作成してください。それはテストされていません。

于 2008-12-08T22:27:36.083 に答える
26

コマンドラインから次のようにします:

sort file | uniq > file.new
于 2011-04-11T16:31:31.603 に答える
6

上記の2つの回答を組み合わせます。

go to head of file
sort the whole file
remove duplicate entries with uniq

1G
!Gsort
1G
!Guniq

削除された重複行の数を知りたい場合は、前後に control-G を使用して、バッファーに存在する行数を確認してください。

于 2008-12-09T01:16:21.000 に答える
6
g/^\(.*\)$\n\1/d

Windowsで動作します。ただし、最初に行をソートする必要があります。

于 2009-11-01T18:23:37.177 に答える
3

視線モード( Shift+ v)で線を選択し、 で選択します:!uniq。これは、次々と来る重複のみをキャッチします。

于 2008-12-08T22:32:51.317 に答える
1

Uniq を VimL に実装する方法については、私が管理しているプラ​​グインで Uniq を検索してください。Vimメーリングリストで提供されたさまざまな実装方法が表示されます。

それ以外の場合:sort uは、実際に行く方法です。

于 2008-12-09T10:05:48.250 に答える
1

ファイル全体を並べ替え/一意にしたくない場合は、ビジュアルモードで一意にしたい行を選択してから、次のようにします:sort u

于 2021-01-13T09:56:18.740 に答える
0
:%s/^\(.*\)\(\n\1\)\+$/\1/gec

また

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

これはあなたへの私の答えです。複数の重複行を削除し、削除せずに1つだけを保持できます!

于 2014-04-30T06:45:51.607 に答える
0

を使用します!}uniqが、それは空白行がない場合にのみ機能します。

ファイル内のすべての行に次を使用します:1,$!uniq

于 2008-12-08T22:34:34.493 に答える