Das LineFilter2-Plugin ist auch einfach zu bedienen.
Karsten
Antworten:
292
Es gibt einen einfachen Weg, dies zu erreichen. Sie müssen 3 Schritte ausführen.
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
Gehen Sie zum Menü "Suchen - Lesezeichen - Inverses Lesezeichen"
==> Alle Zeilen, die Sie löschen möchten, sind mit einem Lesezeichen versehen.
Gehen Sie zum Menü "Suchen - Lesezeichen - Mit Lesezeichen versehene Zeilen entfernen"
+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.
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
Suchmenü -> Lesezeichen -> Nicht markierte Zeilen entfernen.
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
Regex ersetzen
(?!^.*test.*$)^.+
Ersetzen Sie den Test durch Ihren gewünschten Text
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:
(?!)ist ein negativer Blick nach oben. ^.*test.*$ Wählt die gesamte Zeile aus, die den angeforderten Text enthält.
[\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.
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.
Vorausgesetzt, Sie möchten tatsächlich eine Übereinstimmung <Path>und keinen Dateisystempfad finden, können Sie dies über eine Befehlszeile mit Perl versuchen:
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.
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 .
Antworten:
Es gibt einen einfachen Weg, dies zu erreichen. Sie müssen 3 Schritte ausführen.
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
Gehen Sie zum Menü "Suchen - Lesezeichen - Inverses Lesezeichen"
==> Alle Zeilen, die Sie löschen möchten, sind mit einem Lesezeichen versehen.
Gehen Sie zum Menü "Suchen - Lesezeichen - Mit Lesezeichen versehene Zeilen entfernen"
==> Alle markierten Zeilen werden gelöscht.
quelle
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.
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
Suchmenü -> Lesezeichen -> Nicht markierte Zeilen entfernen.
==> Alle NON Markiert Zeilen werden gelöscht.
quelle
^
Suchbegriff hinzufügen noch einen regulären Ausdruck verwenden. Hoffe das hilft jemandem.Reinigen Sie die Lösung nur für Regex
Zweistufige Variante
Regex ersetzen
Ersetzen Sie den Test durch Ihren gewünschten Text
ersetzen
mit
\r\n
Einstufige Variante
Dient
^(?!<Path>).*\r\n
zum 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:
(?!)
ist ein negativer Blick nach oben.^.*test.*$
Wählt die gesamte Zeile aus, die den angeforderten Text enthält.[\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.quelle
\r\n
im 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\n
in\r\n
) geändert . Wenn Regex nicht funktioniert, überprüfen Sie den EOL-Stil unter "Ansicht> Symbole anzeigen> Zeilenende anzeigen". CR =\r
. LF =\n
.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.
quelle
\tLine [\d]*:
. Immer noch eine gute Antwort.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".
quelle
Vorausgesetzt, Sie möchten tatsächlich eine Übereinstimmung
<Path>
und keinen Dateisystempfad finden, können Sie dies über eine Befehlszeile mit Perl versuchen:Es funktionierte mit Strawberry Perl unter Windows, passen Sie es also entsprechend an, wenn die Ergebnisse nicht Ihren Erwartungen entsprechen.
quelle
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.).quelle
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.
quelle
Bessere Lösung mit Regex ersetzen:
Und durch nichts ersetzen
quelle
Verwenden Sie Suchen-> Ersetzen und geben Sie einen regulären Ausdruck wie folgt ein
^[^ ].*
und ersetzen Sie alle durch eine leere Zeichenfolge mitRegular expression
. Die nächste Schritt ist für leere Zeilen der Suche zu finden ,\n\n
ersetzt mit\n
Verwendung vonExtended
mehrfach bis0 occurrences were found.
(Verwendung\r\n\r\n
und\r\n
je nach Dateiformat). Wenn Sie sehr viele Leerzeilen hintereinander haben, können Sie schneller\n\n\n\n\n\n\n
oder sogar mehr\n
: s in der Suchzeichenfolge verwenden .quelle