2009年4月16日木曜日

vimで重複行を一括削除

vim7.2だと、下記コマンドで一発重複行を削除できる。
:sort u

旧操作(お勧めしない)
操作目的:下記ファイルに存在する重複行を削除
====================================
a
b
a
b
a
c
c
====================================

削除後の想定状態
====================================
a
b
c
====================================

手順
:%s/^\(.*\)\n\(\1\n\)*/\1/
where is the character sequence that represents a return in your file type.


下記の旧手順は複雑すぎるので、お勧めしません。
:%sort
->全ファイルをソートする
qa
:%s/^\(.*\)\n\1/\1/
q
100@a
->となり同士の同じ行を削除する動作を100回繰り返す

100で足りるかについて上記操作を完了した後
:%s/^\(.*\)\n\1/\1/
をもう一度実施し、ヒットしませんでした旨のエラーメッセージ
が出れば、完了、そうでなければもう一度適当回数で下記を実施する
100@a

0 件のコメント: