Frage Löschen Sie alle Zeilen in Editor ++ außer Zeilen mit einem Wort, das ich brauche?


Ich habe eine Textdatei und möchte Zeilen mit beginnen <Path>, und lösche alle anderen Zeilen.

Wie kann ich es tun?


174
2018-05-29 15:05


Ursprung


Verbunden: stackoverflow.com/questions/8264391/... - Cees Timmerman
Das LineFilter2-Plugin ist auch einfach zu bedienen. - Karsten


Antworten:


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> (^ ist für den Zeilenstart). Vergessen Sie nicht, "Lesezeichen Zeilen" zu markieren und drücken Sie "Alle markieren"

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

  2. Gehe zu Menü "Suche - Lesezeichen - Inverses Lesezeichen"

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

  3. Gehe zu Menü "Suche - Lesezeichen - Markierte Zeilen entfernen"

    ==> Alle markierten Zeilen werden gelöscht.


252
2018-06-03 20:23



+1. Schön, wusste nichts davon. Es gibt auch Optionen zum "Entfernen von nicht markierten Linien" oder "Ausschneiden / Kopieren markierter Linien", die etwas Zeit sparen können. - deizel
Ich hatte anfangs Schwierigkeiten, weil meine Version (6.2.3) von Notepad ++ keinen Menüpunkt namens "Mark Tab" hat. Stattdessen müssen Sie auf "Suchen" -> "Suchen ..." -> klicken Sie auf den Tab "Mark". Und Sie müssen die Lesezeichen nicht mehr invertieren. Notepad ++ hat jetzt "Unmarkierte Zeilen entfernen". Aber dein Trinkgeld hat mir sehr geholfen! Vielen Dank! - Adam
Sie können Schritt 2 überspringen, da es (mindestens seit v6.4.5) möglich ist, "Nicht markierte Zeilen entfernen" zu wählen. - Nailuj
Ich benutze Notepad ++ so lange und ich habe noch nie gewusst, was 'Lesezeichen' zuvor ist. Erstaunlich, wie mächtig dieses Werkzeug 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 Werkzeug, das Sie verwenden, wirklich kennenlernen können. - Marcello Grechi Lins


Dies kann tatsächlich in zwei Schritten ab 6.3 erfolgen. Ich denke, dass es früher gemacht werden kann, als ich 5.9 hatte, als ich es zuerst versuchte.

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

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

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

  2. Suchmenü -> Lesezeichen -> Unmarkierte Zeilen entfernen.

    ==> Alle NICHT Markierte Zeilen werden gelöscht.


56
2018-02-27 16:03



Dies dauerte 10 Sekunden, während die andere Lösung> 20 Sekunden dauerte. Danke! - Black


Nur Regex-Lösung reinigen

Zwei-Schritt-Variante

  1. Regex ersetzen

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

    Ersetzen Sie den Test durch Ihren angeforderten Text

  2. ersetzen

    [\r\n]{2,}
    

    mit \r\n

Einstufige Variante

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

Erläuterung:

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

  2. [\r\n]{2,} passt zu jedem \r\n das tritt mehr als einmal auf, das ist Windows New line. Wenn Sie Linux oder ein anderes Betriebssystem haben, müssen Sie sich vielleicht damit anlegen. Die zweite besteht darin, sie durch eine Rückleitung zu ersetzen.


25
2017-07-08 16:51



Hinweis für die Völker: Manchmal funktioniert Regex mit Ende der Zeile (EOL) "nicht funktioniert". Das \r\n EOL, das in der Post erwähnt wird, ist das, was Windows verwendet und daher möglicherweise nicht das ist, wonach Sie suchen. Oft ist es in Linux-Umgebungen einfach \noder nur in Mac-Umgebungen \rWenn Sie also eine Datei aus einer Datei ziehen, wird es nicht Windows-Stil-EOL sein. Wenn Sie jedoch über FileZilla- und ASCII-Modus-Trigger herunterladen, kann es sie ändern zurück in Windows EOL (mögen \n in \r\n). Wenn die Regex-Funktion nicht funktioniert, überprüfen Sie den EOL-Stil, indem Sie zu "Ansicht> Symbole anzeigen> Zeilenende anzeigen" gehen. CR = \r. LF = \n. - dhaupin


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

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


5
2017-12-17 11:43



Sie müssen die Zeilennummern entfernen, indem Sie ersetzen \tLine [\d]*: . Immer noch eine gute Antwort. - Noumenon


Gehe zum Menü Suche -> Finden... -> Aktivieren Sie reguläre Ausdrücke. Suche nach "^Pfad"(^ ist für Zeilenanfang).

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

Das Fenster "Ergebnis suchen" wird mit allen Zeilen des Musters angezeigt. Wählen Sie Kopieren / Einfügen auf eine neue Registerkarte in Editor ++.

In dieser neuen Registerkarte, zu: Menü Suche -> Ersetzen... -> Aktivieren Sie reguläre Ausdrücke.

Verwenden Sie in dem Feld "Find what:" das Muster: "Line \ d +:". Lassen Sie das Feld "Ersetzen durch:" leer.

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


4
2018-06-21 16:36





Vorausgesetzt, dass Sie tatsächlich übereinstimmen möchten <Path> und nicht ein Dateisystempfad, können Sie dies über eine Befehlszeile mit Perl versuchen:

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

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


3
2018-05-30 01:02





Es ist ungeschickt, aber kopieren Sie alles auf Excelund dann verwenden =IF(LEFT(A1,6)="<Path>",A1,"") und kopiere diese Formel ganz nach unten. Dann kopiere das zurück auf 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
2018-05-29 18:07



Wenn es mehrere Möglichkeiten gibt, diese Aufgabe direkt zu erledigen, warum sollten Sie sie zerstörend in eine andere Anwendung kopieren, dort verarbeiten und zurückübertragen? - Baldrickk


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 schreiben (ich nehme an, Sie sind auf Windows).

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

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

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

Ich schlage vor, dass Sie die gewünschten Zeilen zu einer neuen Datei drucken. Der Grund dafür ist, dass Sie die Regex-Anweisung wahrscheinlich nicht zum ersten Mal erhalten werden. Das Dienstprogramm "sed" verwendet die Regular Expression Basic-Syntax (die Referenz unter http://www.regular-expressions.info/reference.html). Wenn es so etwas wie einen * nix-Pfad (/ var / www) gibt, müssen Sie das / -Zeichen für die Regex-Funktion umgehen.

Beispiel: sed -n '/^\/var\/www/p' file > newfile 
Dadurch werden alle Zeilen gedruckt, die mit '/ var / www' beginnen. Wenn ich das / -Zeichen entschlüsseln würde, hätte der Befehl einen Fehler ausgelöst. Sie können ein Sonderzeichen (z. B. /) mit dem umgekehrten Schrägstrichzeichen \ trennen.


2
2018-05-30 03:00





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


0
2018-05-29 15:16





Bessere Lösung mit Regex ersetzen:

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

Und durch nichts ersetzen


0
2018-05-01 14:37



Willkommen bei Super User! Möchten Sie das für diejenigen erklären, die vielleicht nicht wissen, was jedes einzelne Teil der Regex tut? :) - bertieb