👋
[vim] 重複行の抽出
ソート済みのテキストから重複行の抽出がしたかったので、vimで対応
" 重複行は連続で2行まで。
aa
bbb
ccc
cccc
dddddddd
dddddddd
eeeeeeee
eeeeeeee
eeeeeeee.txt
eeeeeeee.txt
fff
fff
ddd
↓
dddddddd
eeeeeeee
eeeeeeee.txt
fff
以下で実施できます。
:v/\(^.*$\)\n\1$/delete
行っていることとしては
-
\(^.*$\)
該当行の文字列をキャプチャ -
\n
で改行を検索 -
\1で
キャプチャした文字列で検索 -
:v/<pattern>/<cmd>
でpatternと一致しない行に対してcmd実行。今回のケースだとdeleteを実行し行削除。
です。たまにしか出番ないけど、置換ではなく検索で \1
使えるのとっても便利。
本当は重複行が3行以上連続するテキストにも対応したかったけど、この方法で抽出した行に対して sort u
すればよいので、とりあえずOKです。
参考
:h /\(
:h /\n
:h /\1
:h :v
:h :delete
Discussion