Entfernen doppelter Zeilen in Notepad ++

595

Ist es möglich, doppelte Zeilen in Notepad ++ zu entfernen, sodass nur ein einziges Vorkommen einer Zeile übrig bleibt?

UGEEN
quelle

Antworten:

760

Notepad ++ kann dies tun, vorausgesetzt, Sie möchten nach Zeilen sortieren und gleichzeitig die doppelten Zeilen entfernen.

Sie benötigen das TextFX-Plugin. Dies war früher in älteren Versionen von Notepad ++ enthalten. Wenn Sie jedoch eine neuere Version haben, können Sie diese über das Menü hinzufügen, indem Sie auf gehen Plugins -> Plugin Manager -> Show Plugin Manager -> Available tab -> TextFX -> Install. In einigen Fällen kann es auch aufgerufen werden TextFX Characters, aber das ist das gleiche

Die erforderlichen Kontrollkästchen und Schaltflächen werden nun im Menü unter: angezeigt TextFX -> TextFX Tools.

Stellen Sie sicher, dass "Ausgaben nur eindeutig sortieren ..." aktiviert ist. Wählen Sie als Nächstes einen Textblock aus ( Ctrl+ A, um das gesamte Dokument auszuwählen). Klicken Sie abschließend auf "Zeilen zwischen Groß- und Kleinschreibung unterscheiden" oder "Zeilen zwischen Groß- und Kleinschreibung unterscheiden".

Menü-Layout in n ++

Colin Pickard
quelle
32
Unglaublich leistungsfähiges Plugin, trotz seines "Alters". Ich hoffe, sie werden das NIEMALS aus dem Standard-NPP-Plugin-Angebot entfernen. Der Typ, der über alle Funktionen dieses Plug-Ins nachdachte, war eine Art "Visionär".
GeertVc
7
Stärker als Excel.
Vasu
6
Was ist mit Notepad ++ x64 Version? Plugin TextFX x64-Version existiert nicht
Geograph
15
TextFx ist nicht in der 64-Bit-Version.
Rhyous
4
@Geograph Und es wird kein 64-Bit-Plugin von TextFx geben, siehe diesen Hinweis . Daher wäre es gut zu wissen, ob es ein alternatives Plugin gibt, das das Entfernen von Sortierungen und Duplikaten ermöglicht.
Robert
641

Seit Notepad ++ Version 6 können Sie diesen regulären Ausdruck im Such- und Ersetzungsdialog verwenden:

^(.*?)$\s+?^(?=.*^\1$)

und durch nichts ersetzen . Dadurch bleibt aus allen doppelten Zeilen das letzte Vorkommen in der Datei.

Dafür ist keine Sortierung erforderlich und die doppelten Zeilen können sich an einer beliebigen Stelle in der Datei befinden!

Sie müssen die Optionen "Regulärer Ausdruck" und ". Entspricht Zeilenumbruch" aktivieren:

Notepad ++ Dialog ersetzen

  • ^ entspricht dem Zeilenanfang.

  • (.*?)stimmt mit 0 oder mehr Zeichen überein, aber so wenig wie möglich (es stimmt genau mit der Zeile überein, dies ist aufgrund der Option ". entspricht Zeilenumbruch" erforderlich). Die übereinstimmende Zeile wird aufgrund der Klammern gespeichert und ist mit zugänglich\1

  • $ entspricht dem Zeilenende.

  • \s+?^ Dieser Teil stimmt mit allen Leerzeichen (Zeilenumbrüchen!) bis zum Beginn der nächsten Zeile überein. ==> Dadurch werden die Zeilenumbrüche nach der übereinstimmenden Zeile entfernt, sodass nach dem Ersetzen keine leere Zeile mehr vorhanden ist.

  • (?=.*^\1$)Dies ist eine positive Lookahead-Behauptung. Dies ist der wichtige Teil in diesem regulären Ausdruck. Eine Zeile wird nur dann abgeglichen (und entfernt), wenn genau dieselbe Zeile an einer anderen Stelle in der Datei folgt.

Stema
quelle
10
Oh, dieser ist brillant, er löscht sogar leere Zeilen, ich makroge ihn gerade in diesem Moment :)
Aprillion
66
In einigen Fällen werden nur ALLE Zeilen in einer Datei entfernt.
SerG
3
Gibt es eine Möglichkeit, das LETZTE Vorkommen zu entfernen? Dies passt zu allen bis auf den letzten ...
Cullub
28
In meinem Fall, in dem diese Lösung alle Zeilen entfernt hat, hat das Deaktivieren des Kontrollkästchens . matches newlineden Trick ausgeführt.
Kuitsi
3
@ SerG In einigen Fällen hat es auch bei mir nicht funktioniert, aber als ich "Matches Newline" entfernt habe, hat es funktioniert :)
Davidenko
95

Wenn die Zeilen unmittelbar nacheinander liegen, können Sie einen regulären Ausdruck verwenden:

Suchmuster: ^(.*\r?\n)(\1)+

Ersetzen mit: \1

Grant Peters
quelle
1
Vielleicht haben andere Glück damit gehabt, aber für mich ergibt ^ (. * \ N) \ 1 "
Kann
4
@ b1naryatr0phy Stellen Sie sicher, dass "Suchmodus" auf "Regulärer Ausdruck" eingestellt ist. Ich habe auch das Muster aktualisiert, damit es Zeilenenden im Windows-Stil verarbeiten kann
Grant Peters
3
notepad ++ hat eine leichte Regex-Engine, es erlaubt keine erweiterten Funktionen, nicht einmal das "? oder \ r \ n", da es nur in einer einzelnen Zeile funktioniert und Sie $ für die \ r \ n Zeichen verwenden
Stefan Rogin
3
Dies eliminiert eins nach dem anderen. Sie müssen es viele Male wiederholen. Ich frage mich, warum \ n + -> \ n nicht funktioniert (dachte, es meldet viele Ersetzungen)
Val
2
@Val, wenn Sie den Rückreferenzteil der Übereinstimmung zu einer Gruppe mit 1 oder mehr erforderlichen Übereinstimmungen machen, stimmt das Muster mit N zusammenhängenden doppelten Zeilen gleichzeitig ^(.*\r?\n)(\1)+
überein
37

Editor ++

-> Fenster ersetzen

Stellen Sie sicher , dass im Suchmodus Sie gewählt haben Regulärer Ausdruck Optionsfeld

Finde was:

^ (. *) (\ r? \ n \ 1) + $

Ersetzen mit:

$ 1

Vor:

und wir denken dort

und wir denken dort

einzelne Zeile

Ist es möglich, zu

Ist es möglich, zu

Nach:

und wir denken dort

einzelne Zeile

Ist es möglich, zu

blueberry0xff
quelle
2
Muss die Datei nicht sortiert werden, damit dies funktioniert?
Peter Mortensen
das ist genial
Remo Liechti
30

Wenn Sie sich nicht für die Zeilenreihenfolge interessieren (was ich nicht glaube), können Sie eine Linux / FreeBSD / Mac OS X / Cygwin-Box verwenden und Folgendes tun:

$ cat yourfile | sort | uniq > yourfile_nodups

Öffnen Sie dann die Datei erneut in Notepad ++.

Pablo Santa Cruz
quelle
3
Funktioniert nicht unter Windows 7.'cat' is not recognized as an internal or external command, operable program or batch file.
Iain Samuel McLean Elder
2
@Iain Elder: cat ist ein Standard-Unix-Dienstprogramm, weshalb diese Antwort angibt, dass es unter Linux, FreeBSD und MacOSX funktioniert. Die Antwort schlägt auch Cygwyn vor: Dies ist ein Windows-Programm, das Ihnen eine Unix-Shell und damit Cat bietet. Lange Rede, kurzer Sinn (zu spät!): Win 7 braucht Cygwin, um dies zu tun.
Travis Clark
11
In Windows haben Sie Powershell:cat yourfile | sort -Unique
Elazar
9
Dies sind gute Beispiele für "den unbegründeten Gebrauch von Katze". Vergessen Sie das Dienstprogramm cat und verwenden Sie einfach die Dateiumleitung folgendermaßen: sort <yourfile | uniq> yourfile_nodups
scott8035
1
@ scott8035, ich stimme zu, dass cat für die Ausführung dieses Befehls nicht von Nutzen ist, aber ich finde es oft hilfreich, mit cat zu beginnen, wenn Sie eine lange Folge nicht offensichtlicher Befehle wie cat file | herausfinden sed ... | sed ... | sed ... und so weiter. Ich würde also sagen, dass es Gründe für die Verwendung von Katze geben könnte. Natürlich kann die Katze am Ende entfernt werden, aber einige sind dafür zu faul.
FORTRAN
17

Die letzteren Versionen von Notepad ++ enthalten anscheinend überhaupt nicht das TextFX-Plugin. Um das Plugin zum Sortieren / Entfernen von Duplikaten zu verwenden, muss das Plugin entweder heruntergeladen und installiert werden (mehr Aufwand) oder über den Plugin-Manager hinzugefügt werden.

A) Einfacher Weg (wie hier beschrieben ).

Plugins -> Plugin Manager -> Plugin Manager anzeigen -> Registerkarte Verfügbar -> TextFX-Zeichen -> Installieren

B) Aufwändigerer Weg, wenn eine andere Version benötigt wird oder der einfache Weg nicht funktioniert.

  1. Laden Sie das Plugin von SourceForge herunter:

    http://downloads.sourceforge.net/project/npp-plugins/TextFX/TextFX%20v0.26/TextFX.v0.26.unicode.bin.zip

  2. Öffnen Sie die Zip-Datei und extrahieren Sie NppTextFX.dll

  3. Platzieren Sie NppTextFX.dll im Verzeichnis der Notepad ++ - Plugins, z.
    B.: C: \ Programme \ Notepad ++ \ plugins

  4. Starten Sie Notepad ++, und TextFX wird eines der Menüelemente der Datei sein (wie in Antwort 1 oben von Colin Pickard gezeigt).

Befolgen Sie nach der Installation des TextFX-Plugins die Anweisungen in Antwort 1, um Duplikate zu sortieren und zu entfernen.

Wenn Sie diesen Befehl häufig verwenden oder eine Tastenkombination wie F9 in TextPad zum Sortieren replizieren möchten, können Sie auch eine Tastenkombination über Einstellungen> Shorcut-Mapper einrichten .

östlich
quelle
In Notepad ++ 7.6 sollte das Plug-In hinzugefügt werden C:\Users\<your_user>\AppData\Local\Notepad++\plugins\NppTextFX. Davon abgesehen funktioniert dies immer noch gut.
P_W999
14

In Version 7.8 können Sie dies ohne Plugins erreichen - Bearbeiten -> Linienoperationen -> Aufeinanderfolgende doppelte Linien entfernen. Sie müssen die Datei sortieren, um doppelte Zeilen in aufeinanderfolgender Reihenfolge zu platzieren, bevor dies funktioniert, aber es funktioniert wie ein Zauber.

Sortieroptionen finden Sie unter Bearbeiten -> Linienoperationen -> Sortieren nach ...

dr.nixon
quelle
7

Möglicherweise benötigen Sie dazu ein Plugin. Sie können die Befehlszeile cc.ddl(doppelte Zeilen löschen) von ConyEdit ausprobieren . Es ist ein Editor-Cross-Plugin für die Texteditoren, einschließlich Notepad ++.

Führen Sie die folgenden Schritte aus, während ConyEdit im Hintergrund ausgeführt wird:

  1. Geben Sie die Befehlszeile cc.ddlam Ende des Textes ein.
  2. Kopieren Sie den Text und die Befehlszeile.
  3. Einfügen, dann werden Sie sehen, was Sie wollen.

Beispiel
Geben Sie hier die Bildbeschreibung ein

Donald
quelle
5

Suchen Sie nach dem regulären Ausdruck: \b(\w+)\b([\w\W]*)\b\1\b

Ersetzen Sie es durch: $1$2

Klicken Sie auf die Schaltfläche Ersetzen , bis der reguläre Ausdruck in Ihrer Datei keine Übereinstimmungen mehr enthält.

Hesham Eraqi
quelle
Erstellte eine Testdatei, um dies zu versuchen, aber der reguläre Ausdruck funktionierte nicht zuverlässig, um die Aufgabe zu erledigen.
RockPaperLizard
Würden Sie bitte ein fehlgeschlagenes Beispiel angeben, damit ich meine Antwort verbessern kann?
Hesham Eraqi
4

Keiner hat für mich gearbeitet.

Eine Lösung ist:

Ersetzen

^(.*)\s+(\r?\n\1\s+)+$

mit

\1
Manohar Reddy Poreddy
quelle
Erstellte eine Testdatei, um dies zu versuchen, aber der reguläre Ausdruck funktionierte nicht zuverlässig, um die Aufgabe zu erledigen.
RockPaperLizard
Für alle meine Daten hat es gut funktioniert. Ich habe vergessen, was meine Lösung war. Fügen Sie weitere Details hinzu, wenn dies fehlgeschlagen ist, damit andere Personen diesen regulären Ausdruck verbessern können.
Manohar Reddy Poreddy
Ich habe eine Datei erstellt, sodass jede Zeile eine Ganzzahl zwischen 0 und 1999 enthält, in zufälliger Reihenfolge, manchmal mit Duplikaten. Die meisten Duplikate wurden nicht entfernt, und es wurden keine Duplikate entfernt, die nicht sequentiell waren.
RockPaperLizard
1
Bitte geben Sie 2 Beispiele für arbeitende und nicht arbeitende an. Es wird jemandem helfen.
Manohar Reddy Poreddy
1
warum ^(.*)\s+(\r?\n\1\s+)+$nicht ^(.*)\s*(\r?\n\1\s*)+$?
Mark Ch
2

Der Plugin-Manager ist derzeit für Notepad ++ nicht verfügbar (wird nicht mit der Distribution geliefert). Sie müssen es manuell installieren ( https://github.com/bruderstein/nppPluginManager/releases ) und selbst wenn Sie dies tun, sind viele Plugins nicht mehr verfügbar (kein TextFX).

Möglicherweise gibt es ein anderes Plugin, das die erforderliche Funktionalität enthält. Abgesehen davon besteht die einzige Möglichkeit, dies in Notepad ++ zu tun, darin, einen speziellen regulären Ausdruck zum Abgleichen und anschließenden Ersetzen zu verwenden ( Ctrl+ F→ Registerkarte Ersetzen ).

Obwohl über den Menüpunkt Bearbeiten (Trimmen, Entfernen leerer Zeilen, Sortieren, Konvertieren von EOL) viele Funktionen verfügbar sind, ist keine "eindeutige" Operation verfügbar.

Wenn Sie Windows 10 haben, können Sie Bash aktivieren (geben Sie einfach Ubuntu im Microsoft Store ein und befolgen Sie die Anweisungen in der Beschreibung, um es zu installieren) und verwenden cat your_file.txt | sort | uniq > your_file_edited.txt. Natürlich müssen Sie sich im selben Arbeitsverzeichnis wie "your_file.txt" befinden oder über dessen Pfad darauf verweisen.

Patronaut
quelle