it-swarm.com.de

Löschen Sie alle Zeilen in Notepad ++ mit Ausnahme von Zeilen, die ein von mir benötigtes Wort enthalten?

Ich habe eine Textdatei und möchte die Zeilen mit <Path> beginnen lassen und alle anderen Zeilen löschen.

Wie kann ich es tun?

193
alon

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 Sie 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.

280
stema

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. Erledigt. Detaillierte Anweisungen folgen.

  1. Suchmenü "Suchen". Klicken Sie im Dialogfeld "Suchen" auf die Registerkarte "Markieren". Aktivieren Sie reguläre Ausdrücke. Suchen Sie 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.

    ==> AlleNICHTmarkierten Zeilen werden gelöscht.

64
Recognizer

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

Verwenden Sie ^(?!<Path>).*\r\n, um Übereinstimmungen durch leere Zeichenfolge zu ersetzen. Die verallgemeinerte Version wäre ^(?!.*?test).*\r\n. Dies wird keine leere Zeile am Ende der Datei entfernen. Alle anderen Zeilen, einschließlich mehrerer aufeinanderfolgender Leerzeilen, werden entfernt.

Erläuterung:

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

  2. [\r\n]{2,} stimmt mit jedem \r\n überein, der mehrmals vorkommt, wenn dies eine 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.

26
sonar0m

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.

5
Gubbins

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 in aktuellem 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".

4
Luis

Vorausgesetzt, Sie möchten tatsächlich <Path> und keinen Dateisystempfad angeben, 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
Joe Internet

Es ist umständlich, aber kopieren Sie alles nach Excel und verwenden Sie dann =IF(LEFT(A1,6)="<Path>",A1,"") und kopieren Sie diese Formel 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.).

3
soandos

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 ein Skript in VB erstellen (ich gehe davon aus, dass Sie Windows verwenden).

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ßen Leuten bei GnuWin ( http://gnuwin32.sourceforge.net/packages/sed.htm ) gefunden werden. Sie würden dieses Programm herunterladen und dann Ihren Befehl über die Eingabeaufforderung ausführen.

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

Alle Zeilen, die enthalten, in eine neue Datei drucken:
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 die 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
Dies gibt alle Zeilen aus, 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.

1
Chris Ting

Bessere Lösung mit Regex ersetzen:

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

Und durch nichts ersetzen

1
LoneDev

Verwenden Sie Suchen-> Ersetzen, geben Sie einen regulären Ausdruck wie ^[^ ].* ein und ersetzen Sie alle durch eine leere Zeichenfolge mit Regular expression. Der nächste Schritt besteht darin, leere Zeilen zu finden, die nach \n\n suchen und durch \n mit Extended mehrmals ersetzen, bis 0 occurrences were found. (je nach Dateiformat \r\n\r\n und \r\n verwenden). Wenn Sie sehr viele Leerzeilen hintereinander haben, ist es schneller, \n\n\n\n\n\n\n oder noch mehr \n: s in der Suchzeichenfolge zu verwenden.

0
AndersTornkvist