Sublime - löscht alle Zeilen, die einen bestimmten Wert enthalten


116

Ich habe eine 900-MB-Protokolldatei, die ich in SublimeText 3 öffnen kann. Diese Datei ist mit Zeilen aufgebläht, die den folgenden ähnlich sind.

10/08/2014 23:45:31:828,Information,,,,ExportManager: ,No records to send and/or not connected

Wie kann ich alle Zeilen herausfiltern, die enthalten No records to send and/or not connected


Während die folgenden Lösungen funktionieren, sollte diese Art von Arbeit für große Dateien wirklich mit sed / awk erledigt werden.
Bar

Antworten:


229

Sie können einen regulären Ausdruck suchen und ersetzen:

Klicken Sie auf Suchen> Ersetzen.

Stellen Sie sicher, dass die Schaltfläche Regulärer Ausdruck gedrückt ist.

Geben Sie für das Feld Suchen nach Folgendes ein:

^.*No records to send and/or not connected.*\n

Lassen Sie das Feld Ersetzen durch leer.

Klicken Sie auf Alle ersetzen


16
Der Punkt am Ende ist wichtig, ohne ihn wird es nicht funktionieren. Alternativ können Sie dies verwenden:^.*No records to send and/or not connected\S.*$
Navigatron

Diese Lösung ist die einzig mögliche, wenn Sie mit einer großen Datei arbeiten. Meine Maschine blieb einige Minuten lang hängen, als ich Ctrl+Shift+K200.000 Zeilen ausgewählt hatte.
Przemek D

Imma versuche dies mit meiner 26 000 000 Zeilen Datei: ')
YB Ursache

63

Für Personen, die keinen regulären Ausdruck schreiben möchten, können Sie einfach die Suchzeichenfolge auswählen, ctrl+cmd+g"Schnell alle suchen " drücken oder auswählen, um eine Auswahl für jede passende Zeichenfolge zu erhalten. Von dort Homewird jeder Auswahlcursor an den Anfang der Zeile bewegt, shift+Endjede übereinstimmende Zeile ausgewählt und del, delalle gelöscht.

Die Bearbeitung mehrerer Cursor macht Spaß!


4
Dies ist ein sehr nützlicher, allgemeinerer Tipp. Mein Ziel war es, alle Zeilen zu löschen, die eine Zeichenfolge enthalten. Am Ende habe ich eine Instanz ausgewählt und dann "QuickFind" mit der Verknüpfung verwendet, Ctrl+Cmd+Gwie Leonid für die Auswahl all dieser Zeichenfolgen vorschlägt. Danach konnte ich direkt zu "Zeile löschen" gehen Ctrl-Shift-Kund alle Zeilen mit dieser Zeichenfolge wurden sofort operativ entfernt. Sublime Text ist wirklich der beste Texteditor, den ich je benutzt habe.
MiB

Ist Strg + cmd + g dasselbe wie Strg + Alt + g unter Windows? Ich konnte das nicht zum Laufen bringen
schwarzer Panda

@ Black Panda Für Windows "Quick Find All" ist alt + f3 - Danke Leonid +1
Christopher

Wenn Sie wie ich sind und keine Home-Taste haben, können Sie auch CMD + <- (Pfeil nach links)
Koray Tugay

4
Sie können auch cmd + L verwenden, um die Auswahl auf Linie zu erweitern.
Koray Tugay

52

Ich konnte den regulären Ausdruck nicht zum Laufen bringen, daher habe ich den Alt-F3-Ansatz aus dieser Antwort verwendet:

/superuser/452189/how-can-i-filter-a-file-for-lines-containing-a-string-in-sublime-text-2/598999#598999

  1. Wählen Sie die gewünschte Zeichenfolge aus
  2. Drücken Sie Alt+ F3, um bei allen Vorkommen in den Multi-Cursor-Modus zu wechseln ( Ctrl+ CMD+ Gunter Mac OS X).
  3. Drücken Sie Ctrl+ L[siehe Kommentare] ( Cmd+L auf Mac)
  4. Kopieren-Einfügen-Auswahl in einen anderen Puffer
  5. Del

2
Zwei Dinge: (1) Sie können auf eine einzelne Antwort wie diese verlinken. (2) Sie sollten die andere Antwort hier zusammenfassen (und spezialisieren, um diese Frage gegebenenfalls zu beantworten).
Auffälliger Compiler

4
Sie können die Schritte 3 und 4 durch ersetzen CTRL + L, wodurch die Auswahl auf ganze Zeilen einschließlich Zeilenumbruch erweitert wird.
Chnossos

2
Für diejenigen wie mich, die von einem MAC-Schlüsselschema verflucht wurden: Ctrl+Cmd+Gfür Multi-Cursor bei allen Vorkommen, Cmd+Lzum Erweitern von Zeilen und zum üblichen Kopieren / Einfügen
Cyril Duchon-Doris

27

Folgendes habe ich für die Windows-Benutzer gefunden:

  1. Wählen Sie die Zeichenfolge aus (jede Zeile, die diese Zeichenfolge enthält, muss entfernt werden).
  2. Drücken Sie ALT + F3.
  3. Drücken Sie Strg + L.
  4. Drücken Sie Löschen.

21

Keiner der oben vorgeschlagenen Regex-Codes funktionierte in meinem Fall, aber dies funktionierte:

.*(text in question).*

Es werden leere Zeilen in Ihrem Code gelassen, möchten Sie das? Wenn nicht, hinzufügen \noder $am Ende:.*(text in question).*\n
Benutzer

Wenn Zeilen eine "abc / xyz / etwas" -ähnliche Struktur haben, fügen Sie zur Verwendung von Regex '\' hinzu. Wenn wir zum Beispiel irgendetwas zwischen abc / und / etwas suchen müssen, lautet der Ausdruck: abc /\.*.*\/ etwas
Avik

Funktioniert für mich. Wenn Sie wie ich mehrere Übereinstimmungen benötigen, verwenden Sie diese |wie .*(a).*|.*(b).*|.*(c).*
folgt

0

Ich hatte ein ähnliches Problem beim Bearbeiten einer Sitemap

Das hat bei mir funktioniert:

  1. Kopieren Sie das letzte Wort in die Zeilen, die Sie löschen möchten
  2. Finde alle
  3. Drücken Sie Löschen, um die gesamte Zeile zu löschen

0

Die obigen Antworten sind die richtigen Methoden. Wenn Sie jedoch die Zeilen mit nur einer Zeichenfolge entfernen möchten, gehen Sie zu Suchen -> Ersetzen -> ^.*[a-zA-Z]+.*\nIn den Suchabschnitt und ersetzen Sie sie durch Leerzeichen. Klicken Sie auf die Schaltfläche Alle ersetzen, um alle Zeilen mit nur einer einzelnen Zeichenfolge zu löschen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.