Wie kann ich doppelte Zeilen in Visual Studio Code entfernen?

115

Angenommen, Sie haben den folgenden Text:

abc
123
abc
456
789
abc
abc

Ich möchte alle "abc" -Linien entfernen und nur eine behalten. Es macht mir nichts aus zu sortieren. Das Ergebnis sollte folgendermaßen aussehen:

abc
123
456
789
Younes
quelle

Antworten:

221

Wenn die Reihenfolge der Zeilen nicht wichtig ist

Sortieren Sie Zeilen alphabetisch, falls dies noch nicht geschehen ist, und führen Sie die folgenden Schritte aus:
(Basierend auf dieser verwandten Frage: Wie finde und entferne ich doppelte Zeilen mithilfe von regulären Ausdrücken aus einer Datei? )

  1. Control+F

  2. Schalten Sie "Ersetzungsmodus" um

  3. Aktivieren Sie "Regulären Ausdruck verwenden" (das Symbol mit dem .*Symbol).

  4. Geben Sie im Suchfeld Folgendes ein^(.*)(\n\1)+$

  5. Geben Sie in das Feld " Ersetzen durch " ein$1

  6. Klicken Sie auf die Schaltfläche Alle ersetzen("Alle ersetzen").

Wenn die Reihenfolge der Zeilen ist wichtig , so dass Sie nicht sortieren

In diesem Fall greifen Sie entweder auf eine Lösung außerhalb von VS Code zurück (siehe hier ) oder - wenn Ihr Dokument nicht sehr groß ist und Sie nichts dagegen haben, die Schaltfläche Alle ersetzen zu spammen - folgen Sie den vorherigen Schritten, aber in den Schritten 4 und 5: Geben Sie Folgendes ein:
(basierend auf Entfernen bestimmter doppelter Zeilen ohne Sortierung )

Achtung: Blöcke für Dateien mit zu vielen Zeilen (1000+); kann zum Absturz von VS Code führen; kann in einigen Fällen Leerzeilen einführen.

  • Suche :((^[^\S$]*?(?=\S)(?:.*)+$)[\S\s]*?)^\2$(?:\n)?

  • ersetzen durch :$1

Klicken Sie dann so oft auf die Schaltfläche "Alle ersetzen", wie es doppelte Vorkommen gibt .

Sie werden wissen, dass es ausreicht, wenn die Zeilenanzahl nicht mehr abnimmt, wenn Sie auf die Schaltfläche klicken. Navigieren Sie zur letzten Zeile des Dokuments, um dies im Auge zu behalten.

März 2377
quelle
4
((^[^\S\r\n]*?(?=\S)(?:.*)+$)[\S\s]*?)^\2$(?:\r?\n)?hat meinen vscode zum Absturz gebracht .... Ich habe in einer Datei 229 Zeilen gesucht. :(
Hickory420
@ Hickory420 Ich habe in meinem Computer mit 1000 Zeilen (20 Zeichen lang, zufällig) getestet und keinen Absturz bekommen, aber tatsächlich blockiert ein Thread bei jedem Durchgang einige Sekunden lang mit 100% CPU-Last. Ja, das ist für große Dateien kaum praktisch.
März 2377
Danke dafür. Können Sie bitte die Regex erklären ^(.*)(\n\1)+$. Nach dem Entfernen doppelter Zeilen möchte ich alle Zeilen mit doppelter erster Spalte in der CSV anzeigen und den regulären Ausdruck ändern.
Urvah Shabbir
1
Wow, ich fühle mich ziemlich gut in Regex und das hat mich immer noch umgehauen, tolle Antwort !!
Electrovir
@UrvahShabbir, eine Erklärung für diesen regulären Ausdruck finden Sie in den verknüpften Fragen und Antworten . Meins unterscheidet sich nur darin, dass das \r?Bit von der anderen Antwort nicht wirklich notwendig ist.
März 2377,
65

Hier ist eine sehr interessante Erweiterung: Transformer

Eigenschaften:

  • Einzigartige Linien
  • Eindeutige Zeilen als neues Dokument
  • Filterzeilen
  • Zeilen als neues Dokument filtern
  • Zeilen sortieren
  • Zeilen nach Länge sortieren
  • Am Cursor ausrichten
  • CSV ausrichten
  • Kompaktes CSV
  • In neues Dokument kopieren
  • Wählen Sie Linien
  • Zeilen als JSON
  • Trimmlinien
  • Doppelte Zeilen als neues Dokument zählen
  • Makros

So entfernen Sie doppelte Zeilen:

  • Entfernt doppelte Zeilen aus dem Dokument

  • Arbeitet mit Auswahl oder aktuellem Block, wenn keine Auswahl erfolgt

Ich habe außer dem Befehl "Unique Lines" nicht viel damit gespielt, aber es scheint ziemlich gut gemacht zu sein (einschließlich des Versuchs eines Makrorecorders!).

Kennzeichen
quelle
25

Zur Antwort von @ Marc.2377 hinzufügen.

Wenn die Reihenfolge wichtig ist und es Ihnen egal ist, dass Sie nur die letzte der doppelten Zeilen behalten, suchen Sie einfach nach dem folgenden regulären Ausdruck, wenn Sie nur doppelte, nicht leere Zeilen entfernen möchten

^(.+\n)(?=(?:.*\n)*?\1)

Wenn Sie auch doppelte Leerzeilen entfernen möchten, verwenden Sie *anstelle von+

^(.*\n)(?=(?:.*\n)*?\1)

und durch nichts ersetzen.

Screenshot des ausgefüllten Such- und Ersetzungsfelds

Dies wird eine Zeile dauern und versuchen, weitere (möglicherweise 0) Zeilen voraus zu finden, gefolgt von genau derselben Zeile. Die genommene Linie wird entfernt.

Dies ist nur eine einmalige Regex. Sie müssen den Ersetzungsknopf nicht als Spam versenden.

Skeeve
quelle
Schön prägnant
Angus l
4
Nett. Ich empfehle ^(.+\n)(?=(?:.*\n)*?\1)stattdessen, weil Ihre Regex eine leere Zeile entfernt hat, wo dies nicht erwartet wurde. Trotzdem upvoted.
März 2377
Guter Fang… OTOH: doppelte leere Zeilen sind auch doppelte;)
Skeeve
1
@Skeeve Komm schon, dies ist nur ein kleiner Dank für deine hilfreiche Antwort und alles für eine bessere Community :)
Zaman
1
xxx(?=…)ist ein Lookahead-Match. So wird sichergestellt, dass "xxx" mit "..." übereinstimmt, die Suche jedoch nicht vorantreibt. (?:…)ist nur eine Klammer, die bei der Klammerzählung nicht berücksichtigt wird. .*\nist ein Muster für eine (möglicherweise leere) Zeile. *bedeutet, dass es so viele Zeilen geben kann, auch keine. Das ?Nach dem Sternchen ( *) bedeutet, dass wir so wenig Zeilen wie möglich haben möchten. Wie \1folgt folgt dieser Ausdruck, dass wir nach vorne nach allen Linien suchen, die nicht übereinstimmen, \1bis wir eine Linienübereinstimmung finden \1. Ich hoffe das macht es klar.
Skeeve
22

Ich hatte gerade das gleiche Problem und fand das Visual Studio Code-Paket "Zeilen sortieren". Weitere Informationen finden Sie auf dem Visual Studio Code-Marktplatz (z . B. Zeilen sortieren ).

Dieses Paket hat die Option "Zeilen sortieren (eindeutig)", die es für mich getan hat. Achten Sie auf Leerzeichen am Anfang / Ende der Zeilen. Sie beeinflussen, ob Linien als eindeutig betrachtet werden oder nicht.

SimonAx
quelle
market.visualstudio.com/… sollte auch funktionieren.
kcpr
1
Es scheint, dass die Erweiterung keine doppelten Einträge mehr entfernen kann. Die Kombination mit der Antwort von @ Marc-2377 scheint mir den Trick zu tun.
Dan Atkinson
12

Installieren Sie die DupChecker- Erweiterung, drücken SieF1 und geben Sie "Duplikate prüfen " ein.

Es wird nach Duplikaten gesucht und gefragt, ob Sie diese entfernen möchten.

perfecto25
quelle
11

Versuchen Sie, einen regulären Ausdruck zu finden und durch einen regulären Ausdruck zu ersetzen .

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

  • Ersetzen: $1$2

Es ist möglich, eine gewisse Varianz in die erste Gruppe einzuführen.

Lavock
quelle
-2

Nicht wirklich in Visual Studio Code, aber wenn es funktioniert, funktioniert es.

  1. Öffnen Sie eine neue Excel-Tabelle
  2. Fügen Sie die Daten in eine Spalte ein
  3. Gehen Sie zur Registerkarte Daten
  4. Wählen Sie die Datenspalte aus (falls Sie dies noch nicht getan haben).
  5. Klicken Sie auf Duplikate entfernen (etwas in der Mitte der Leiste).
  6. Klicken Sie hier OK, um Duplikate zu entfernen.

Es ist nicht die beste Antwort, wie Sie Visual Studio Code angegeben haben, aber wie gesagt: Wenn es funktioniert, funktioniert es :)

NostraDavid
quelle
Sie können die Relevanz erhöhen, indem Sie ein Skript bereitstellen , das direkt aus Visual Studio Code aufgerufen werden kann. Mit anderen Worten, automatisiert diesen Prozess. Ich weiß nicht, ob es möglich ist, aber ein Skript, das Excel über seine exponierten COM-Schnittstellen aufruft. Dies würde diese Antwort viel wertvoller machen, da dies ein Beispiel für die Nutzung anderer Anwendungen wäre, um ordentliche Dinge zu erledigen.
Peter Mortensen