Entfernen von doppelten Zeilen in vi?
Ich habe eine text-Datei, die enthält eine lange Liste von Einträgen (einer pro Zeile). Einige davon sind Duplikate, und ich würde gerne wissen, ob es möglich ist (und wenn ja, wie) zu entfernen Sie alle Duplikate. Ich bin daran interessiert, dies innerhalb von vi/vim, wenn möglich.
InformationsquelleAutor der Frage Sydius | 2008-12-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie OK mit der Sortierung Ihrer Datei, die Sie verwenden können:
InformationsquelleAutor der Antwort Brian Carper
Versuchen Sie dies:
:%s/^\(.*\)\n\1$/\1/
Kopieren, obwohl, bevor Sie versuchen es. Es ist noch ungetestet.
InformationsquelleAutor der Antwort Sean
Von der Kommandozeile nur:
InformationsquelleAutor der Antwort Kevin
Funktioniert bei mir auf Windows. Linien muss sortiert werden, wenn erste.
InformationsquelleAutor der Antwort Bridgey
Ich würde kombinieren Sie zwei Antworten vor:
Wenn Sie waren interessiert, zu sehen, wie viele doppelte Zeilen entfernt wurden, mit Strg-G vor und nach, prüfen, auf die Anzahl der Zeilen in Ihrem Puffer.
InformationsquelleAutor der Antwort Jon DellOro
awk '!x[$0]++' yourfile.txt
wenn Sie möchten, beibehalten der Reihenfolge (D. H., die Sortierung ist nicht akzeptabel). Um es aufrufen von vim,:!
verwendet werden kann.InformationsquelleAutor der Antwort Rovin Bhandari
Wählen Sie die Zeilen in visual-line-Modus (Shift+v), dann
:!uniq
. Das wird nur fangen Duplikate, die kommen einer nach dem anderen.InformationsquelleAutor der Antwort derobert
Darüber, wie Uniq umgesetzt werden können, in VimL, Suche für Uniq in einer plugin Pflege ich. Sie werden sehen, verschiedene Möglichkeiten, es zu implementieren, die gegeben wurden, auf der Vim-Mailingliste.
Ansonsten
:sort u
ist in der Tat der Weg zu gehen.InformationsquelleAutor der Antwort Luc Hermitte
oder
dies ist meine Antwort für Sie ,es zu entfernen kann mehrere doppelte Linien und
nur halten Sie nicht entfernen !
InformationsquelleAutor der Antwort cn8341
Ich würde
!}uniq
aber das funktioniert nur, wenn es keine leeren Zeilen.Für jede Zeile einer Datei verwenden:
:1,$!uniq
.InformationsquelleAutor der Antwort Chris Dodd
Dieser version entfernt nur die wiederholten Linien, die contigous. Ich meine, nur löscht aufeinander folgenden Zeilen wiederholt. Anhand der vorgegebenen Karte die Funktion nicht beachten versauen mit Leerzeilen. Aber wenn ändern Sie den regulären Ausdruck für Anfang von Zeile
^
es wird auch entfernen Sie doppelte leere Zeilen.InformationsquelleAutor der Antwort SergioAraujo