This question已經解決了如何刪除重複行,但強制列表首先排序。在無需排序的情況下在vi中刪除連續的重複行
我想執行刪除連續重複行的步驟(即uniq
),而不先進行排序。
實例之前:
實例後Foo
Foo
Bar
Bar
:
Foo
Bar
This question已經解決了如何刪除重複行,但強制列表首先排序。在無需排序的情況下在vi中刪除連續的重複行
我想執行刪除連續重複行的步驟(即uniq
),而不先進行排序。
實例之前:
實例後Foo
Foo
Bar
Bar
:
Foo
Bar
剛剛發現的系統解決方案here。下面的正則表達式正常工作:
g/^\(.*\)$\n\1$/d
:%!uniq
,如果你是在UNIX系統上,或具有uniq
程序
如果你只是想刪除連續重複的線路,只需使用的uniq不排序任何東西。
:%!uniq
如果要刪除不連續的重複,你可以使用
: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
:%s/^\(.*\)\(\n\1\)\+$/\1/ge
這是我對你的答案
我知道這是舊的,但值得一提的下面,如果你不介意的排序,以及也可以(我知道OP想避免它):
:sort u
很好的建議,我應該提到在這個問題上,我在Windows上(也沒有Cygwin)。 – dukedave 2010-04-29 16:05:48