Löschen Sie alle Zeilen in Notepad ++ mit Ausnahme von Zeilen, die ein Wort enthalten, das ich brauche?


Antworten:


292

Es gibt einen einfachen Weg, dies zu erreichen. Sie müssen 3 Schritte ausführen.

  1. Gehen Sie zum Menü Suchen> Suchen ...> Wählen Sie die Registerkarte "Markieren". Aktivieren Sie reguläre Ausdrücke. Suchen nach ^<Path>( ^steht für Zeilenanfang). Vergessen Sie nicht, "Lesezeichen" zu markieren und "Alle markieren" zu drücken.

    ==> Alle Zeilen, die Sie behalten möchten, haben ein Lesezeichen

  2. Gehen Sie zum Menü "Suchen - Lesezeichen - Inverses Lesezeichen"

    ==> Alle Zeilen, die Sie löschen möchten, sind mit einem Lesezeichen versehen.

  3. Gehen Sie zum Menü "Suchen - Lesezeichen - Mit Lesezeichen versehene Zeilen entfernen"

    ==> Alle markierten Zeilen werden gelöscht.


47
+1. Nett, wusste nichts davon. Es gibt auch Optionen zum Entfernen nicht markierter Linien oder zum Ausschneiden / Kopieren markierter Linien, die Zeit sparen können.
Deizel

6
Anfangs hatte ich Probleme, weil meine Version (6.2.3) von Notepad ++ keinen Menüeintrag mit dem Namen "Mark Tab" enthält. Gehen Sie stattdessen zu "Suchen" -> "Suchen ..." -> klicken Sie auf den Reiter "Markieren". Und Sie müssen die Lesezeichen nicht mehr umkehren. Notepad ++ hat jetzt "Nicht markierte Zeilen entfernen". Aber dein Tipp hat mir sehr geholfen! Vielen Dank!
aakoch

22
Sie können Schritt 2 überspringen, da (spätestens seit v6.4.5) die Option "Nicht markierte Linien entfernen" ausgewählt werden kann.
Julian

4
Ich benutze Notepad ++ so lange und ich habe noch nie gewusst, was 'Lesezeichen' sind. Erstaunlich, wie mächtig dieses Tool ist und wie wenig ich darüber weiß.
Danubian Sailor

Du bist ein Genie. Dies ist nur ein weiteres schockierendes Beispiel dafür, wie Sie das von Ihnen verwendete Werkzeug kennenlernen können.
Marcello Grechi Lins

67

Dies kann ab 6.3 in zwei Schritten erfolgen. Ich denke, es kann früher gemacht werden, da ich 5.9 hatte, als ich es zum ersten Mal ausprobiert habe.

Verwenden Sie Stemas Post als Grundlage für diese Antwort. Es gibt jetzt einen Schritt weniger. Linien markieren und nicht markierte Linien entfernen. Getan. Detaillierte Anweisungen folgen.

  1. Suchmenü "Suchen". Klicken Sie im Dialogfeld "Suchen" auf die Registerkarte "Markieren". Aktivieren Sie reguläre Ausdrücke. Suchen nach ^<Path>( ^steht für Zeilenanfang). Vergessen Sie nicht, "Lesezeichen" zu markieren und "Alle markieren" zu drücken.

    ==> Alle Zeilen, die Sie behalten möchten, haben jetzt ein Lesezeichen

  2. Suchmenü -> Lesezeichen -> Nicht markierte Zeilen entfernen.

    ==> Alle NON Markiert Zeilen werden gelöscht.


3
Dies dauerte 10 Sekunden, während die andere Lösung> 20 Sekunden dauerte. Vielen Dank!
Black

Ich musste weder den ^Suchbegriff hinzufügen noch einen regulären Ausdruck verwenden. Hoffe das hilft jemandem.
Sa_leinad

29

Reinigen Sie die Lösung nur für Regex

Zweistufige Variante

  1. Regex ersetzen

    (?!^.*test.*$)^.+
    

    Ersetzen Sie den Test durch Ihren gewünschten Text

  2. ersetzen

    [\r\n]{2,}
    

    mit \r\n

Einstufige Variante

Dient ^(?!<Path>).*\r\nzum Ersetzen von Übereinstimmungen durch eine leere Zeichenfolge. Verallgemeinerte Version wäre ^(?!.*?test).*\r\n. Dadurch wird keine leere Zeile am Ende der Datei entfernt. Alle anderen Zeilen, einschließlich mehrerer aufeinanderfolgender Leerzeilen, werden entfernt.

Erläuterung:

  1. (?!)ist ein negativer Blick nach oben. ^.*test.*$ Wählt die gesamte Zeile aus, die den angeforderten Text enthält.

  2. [\r\n]{2,}Stimmt mit allen überein \r\n, die mehrmals vorkommen, wenn dies die neue Windows-Zeile ist. Wenn Sie Linux oder ein anderes Betriebssystem haben, müssen Sie möglicherweise damit herumspielen. Die zweite besteht darin, sie durch eine Rückleitung zu ersetzen.


1
Hinweis für die Völker: Manchmal funktioniert Regex mit Zeilenende (EOL) "nicht". Die \r\nim Beitrag erwähnte EOL ist das, was Windows verwendet und daher möglicherweise nicht das ist, wonach Sie suchen. In Linux-Umgebungen ist dies oft nur der Fall \n, oder in Mac-Umgebungen nur \r. Wenn Sie also eine Datei von einer dieser beiden ziehen, wird sie nicht im Windows-Stil erstellt. Wenn Sie jedoch Trigger im FileZilla- und ASCII-Modus herunterladen, werden diese möglicherweise wieder in Windows EOL (wie \nin \r\n) geändert . Wenn Regex nicht funktioniert, überprüfen Sie den EOL-Stil unter "Ansicht> Symbole anzeigen> Zeilenende anzeigen". CR = \r. LF = \n.
Dhaupin

5

Es scheint mir, dass der einfachste Weg ist, einfach die Funktion "Alle in aktuellem Dokument suchen" zu verwenden und dann entweder die Ergebnisse in eine neue Datei zu kopieren oder alle auszuwählen und in der aktuellen zu ersetzen.

Dies würde alle Zeilen finden, die Ihren Text enthalten, und sie unten auflisten. Einfach mit der rechten Maustaste auf das Suchergebnis klicken und kopieren / einfügen.


Sie müssen die Zeilennummern durch Ersetzen entfernen \tLine [\d]*: . Immer noch eine gute Antwort.
Noumenon

Dies funktioniert nicht für die Zeilen, die so breit sind, dass Notepad ++ sie im Suchergebnisfenster abschneidet.
MasterJoe2

4

Gehen Sie zum Menü Suchen -> Suchen ... -> Reguläre Ausdrücke aktivieren. Suchen Sie nach "^ Pfad " (^ steht für Zeilenanfang).

Klicken Sie auf die Schaltfläche "Alle im aktuellen Dokument suchen".

Das Fenster "Suchergebnis" wird mit allen Linien des Musters angezeigt. Wählen Sie Kopieren / Einfügen in eine neue Registerkarte in Notepad ++.

Gehen Sie in diesem neuen Tab zu: Menü Suchen -> Ersetzen ... -> Reguläre Ausdrücke aktivieren.

Verwenden Sie im Feld "Suchen nach:" das Muster: "Line \ d +:". Lassen Sie das Feld "Ersetzen durch:" leer.

Klicken Sie auf die Schaltfläche "Alle ersetzen".


3

Vorausgesetzt, Sie möchten tatsächlich eine Übereinstimmung <Path>und keinen Dateisystempfad finden, können Sie dies über eine Befehlszeile mit Perl versuchen:

perl -pe " if ($_ !~ /<Path>/) { s/$_// } " < in.txt > out.txt

Es funktionierte mit Strawberry Perl unter Windows, passen Sie es also entsprechend an, wenn die Ergebnisse nicht Ihren Erwartungen entsprechen.


3

Es ist umständlich, aber kopieren Sie alles nach Excel und verwenden =IF(LEFT(A1,6)="<Path>",A1,"")und kopieren Sie diese Formel dann ganz nach unten. Kopieren Sie diese dann zurück in Notepad ++. Es ist nicht ideal, aber es ist ziemlich einfach (wenn Sie Excel haben). Warnung: Es funktioniert nicht gut mit eingerückten Zeilen (Excel verschiebt die Spalten usw.).


Wenn es eine Reihe von Möglichkeiten gibt, diese Aufgabe direkt zu erledigen, warum sollten Sie dann destruktiv in eine andere Anwendung kopieren, dort verarbeiten und zurück übertragen?
Baldrickk

1

Es gibt keine einfache Möglichkeit, mit Notepad ++ das zu tun, was Sie wollen. Sie müssen entweder ein Programm auf Ihren Computer herunterladen oder etwas in VB skripten (ich nehme an, Sie arbeiten unter Windows).

Sie können mit sed auf zwei Arten tun, was Sie wollen. Das sed-Dienstprogramm ist ein Favorit auf * nix und kann für Windows von den großartigen Leuten bei GnuWin ( http://gnuwin32.sourceforge.net/packages/sed.htm ) gefunden werden. Sie würden dieses Programm herunterladen und dann Ihren Befehl an der Eingabeaufforderung ausführen.

Löschen Sie alle Zeilen, die Folgendes nicht enthalten:
sed -i '/^<PATH>/!d' file

Drucke alle Zeilen, die eine neue Datei enthalten:
sed -n '/^<PATH>/p' file > newfile

Ich schlage vor, Sie drucken die gewünschten Zeilen in eine neue Datei. Der Grund dafür ist, dass Sie die Regex-Anweisung wahrscheinlich nicht zum ersten Mal erhalten. Das Dienstprogramm sed verwendet die Basissyntax für reguläre Ausdrücke (siehe Referenz unter http://www.regular-expressions.info/reference.html ). Wenn es sich um einen * nix-Pfad (/ var / www) handelt, müssen Sie das / -Zeichen maskieren, damit Ihre Regex funktioniert.

Beispiel: sed -n '/^\/var\/www/p' file > newfile
Hiermit werden alle Zeilen ausgegeben, die mit '/ var / www' beginnen. Wenn ich mich angemeldet hätte, um dem / -Zeichen zu entkommen, hätte der Befehl einen Fehler ausgelöst. Sie können ein Sonderzeichen (z. B. /) mit dem umgekehrten Schrägstrich \ maskieren.


Dies mag eine alte Antwort sein, aber da es tatsächlich unglaublich 2 Stimmen hat (-1 jetzt von mir) wollte ich nicht nur kommentieren, wie falsch es ist, sondern in einer SINGLE-Befehlsoperation wiederholen, wie ich gerade (wieder) eine> 100k-Leitung genommen habe Protokolldatei bis zu den 34 Zeilen mit dem einen Wort (oder Ausdruck) in diesem Fall einfach "Fehler" in weniger als 3 Sekunden, indem Sie einfach diese Regex in das Feld FINDEN, WAS: ^ (?!. *? Fehler). * \ r \ n und lassen Sie REPLACE WITH leer, und wählen Sie NICHT ".matches newline" und klicken Sie auf "REPLACE ALL". Ja, ich liebe auch sed und awk, aber zu sagen, dass NPP dies nicht kann, ist einfach falsch.
Collin Chaffin

1

Bessere Lösung mit Regex ersetzen:

(?!^.*SOMETEXT.*$)^.+\r?\n

Und durch nichts ersetzen


1
Willkommen bei Super User! Möchten Sie dies für diejenigen erklären, die möglicherweise nicht wissen, was die einzelnen Regex-Elemente bewirken? :)
bertieb

0

Verwenden Sie Suchen-> Ersetzen und geben Sie einen regulären Ausdruck wie folgt ein ^[^ ].*und ersetzen Sie alle durch eine leere Zeichenfolge mit Regular expression. Die nächste Schritt ist für leere Zeilen der Suche zu finden , \n\nersetzt mit \nVerwendung von Extendedmehrfach bis 0 occurrences were found.(Verwendung \r\n\r\nund \r\nje nach Dateiformat). Wenn Sie sehr viele Leerzeilen hintereinander haben, können Sie schneller \n\n\n\n\n\n\noder sogar mehr \n: s in der Suchzeichenfolge verwenden .

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.