Regex: Entfernen Sie Zeilen mit "Hilfe" usw.


371

Ich habe ein langes Dokument mit Befehlen. Mit Notepad ++ oder Regex möchte ich alle Zeilen löschen, die "Hilfe" enthalten, einschließlich keyboard_help usw.

Wie kann das gemacht werden?

Antworten:


945

Dies ist auch mit Notepad ++ möglich:

  • Gehen Sie auf die Suche Menü Ctrl+ F, und öffnen Sie die Mark Reiter.
  • Überprüfen Sie Lesezeichen Linie (wenn es keine Mark Registerkarte Update auf die aktuelle Version).

  • Geben Sie Ihren Suchbegriff ein und klicken Sie auf Alle markieren

    • Alle Zeilen, die den Suchbegriff enthalten, sind mit Lesezeichen versehen.
  • Gehen Sie nun zum Menü SuchenLesezeichen → Mit Lesezeichen versehene Zeilen entfernen

  • Erledigt.


36
Ja! Es hat auch 'Unmarkierte Linien entfernen', was wie grep ist, genau das, was ich brauchte!
Chloe

6
Danke, das ist ein ordentlicher Trick. Ich möchte es lieber mit ein paar einfachen Klicks erledigen, als eine Unix-Konsole (ohne zu wissen, dass ich hauptsächlich unter Windows arbeite) cdin den Pfad zu starten und einen komplexen Befehl einzugeben (sich Gedanken über die Syntax zu machen und permanent Fehler zu machen und dann zu realisieren Es gibt kein Backup. [ Versteh mich nicht falsch, ich benutze die ganze Zeit Konsolenbefehle für andere Dinge, aber für so etwas ist es nur ein Overkill.]
ADTC

2
Habe

3
Überprüfung BOOKMARK LINEist hier wichtig, sonst funktioniert es nicht!.
HaSeeB MiR

1
@ AndrewSchultz, sorry, aber nein.
Stema

187

Eine andere Möglichkeit, dies in Notepad ++ zu tun, besteht im Dialogfeld Suchen / Ersetzen und mit Regex:

  • Ctrl+ h, um das Dialogfeld "Ersetzen ersetzen" aufzurufen.

  • Find what:Geben Sie in das Textfeld Ihren regulären Ausdruck ein: .*help.*\r?\n(wobei der \roptional ist, falls die Datei keine Windows-Zeilenenden hat).

  • Lassen Sie das Replace with:Textfeld leer.

  • Stellen Sie sicher, dass das Optionsfeld Regulärer Ausdruck im Bereich Suchmodus ausgewählt ist. Dann klicken Replace Allund voila! Alle Zeilen mit Ihrem Suchbegriff helpwurden entfernt.

How-To Line In N ++ ersetzen


17
Bessere Antwort als die Verwendung der Registerkarte "Markieren", da dies für "In Dateien suchen"
Alex

2
Stellen Sie sicher, dass Sonderzeichen wie Klammern mit einem Backslash maskiert werden.
Noumenon

4
Stellen Sie sicher, dass das Kontrollkästchen ". entspricht Neuzeile"
deaktiviert ist

1
Bessere Antwort aufgrund einer höheren Leistung. Mit Dateien von> 1 Million Zeilen wird die Lesezeichenmethode auch auf modernen Maschinen maximal gedehnt.
Roland Ettinger

17

Einfache Aufgabe mit grep:

grep -v help filename

Anhängen > newFileName, um die Ausgabe in eine neue Datei umzuleiten.


Aktualisieren

Um dies zu verdeutlichen, werden die Zeilen normalerweise auf dem Bildschirm gedruckt. Um es an eine Datei weiterzuleiten, >kann das verwendet werden. Also in diesem Befehl:

grep -v help filename > newFileName
  1. grepruft das grepProgramm natürlich auf
  2. -vist ein Flag zum Umkehren der Ausgabe. Druckt standardmäßig grepdie Linien, die dem angegebenen Muster entsprechen. Mit diesem Flag werden die Linien gedruckt, die nicht zum Muster passen.
  3. help ist das passende Muster
  4. filename ist der Name der Eingabedatei
  5. > leitet die Ausgabe an das folgende Element weiter
  6. newFileName Die neue Datei, in der die Ausgabe gespeichert wird.

Wie Sie vielleicht bemerkt haben, werden Sie keine Dinge in Ihrer Datei löschen. grepwird es lesen und eine andere Datei wird gespeichert, entsprechend geändert.


@ Kevin Duke: Ach! Das bedeutet wahrscheinlich, dass Sie nicht grepinstalliert haben. Wie auch immer, ich würde Ihnen empfehlen, GNU grep zu installieren, es wird sicherlich unter Windows funktionieren und es ist ein wirklich nützliches Tool.
Sidyll

@sidyll es wusste, was grep ist und es hat eine Menge ausgegeben, es könnte sein, weil ich keine Ausgabedatei angegeben habe
Zitrone

2
@ Kevin Duke: Wie ich bereits in der Antwort sagte, kann die Ausgabe umgeleitet werden. Das Standardverhalten ist das Drucken auf dem Bildschirm. Um umzuleiten, verwenden Sie eine Pipe ( >in diesem Fall), die einen endgültigen Befehl vongrep -v help filename > outputFileName
Sidyll

Danke, ich werde es auf jeden Fall versuchen!
Zitrone

grep> sed jeden Tag der Woche für das Finden von Sequenzen von Zeichen
kwikness

13

Sie können dies mit sed tun: sed '/help/ d' < inputFile > outputFile


4
@CengizFrostclaw: An der Kommandozeile unter Linux / Mac / Whatever. Wenn Sie unter Windows arbeiten, müssen Sie CygWin installieren und verwenden.
Tikhon Jelvis

Danke @TikhonJelvis! Und eine letzte Frage: Können wir sed 'help /' ausführen, um alle Zeilen zu löschen, die mit Hilfe beginnen (nicht enthalten)?
Jeff

3
@CengizFrostclaw: Ich denke sed '/^help/ d'sollte funktionieren. Das ^steht für den Zeilenanfang.
Tikhon Jelvis

@ Jeff PowerShell hat sedundgrep
Ooker

cygwin funktioniert möglicherweise nicht unter Windows mit utf-16-Dateien. Cygwin-Dienstprogramme verwenden standardmäßig UFT-8. Sehr wenige von ihnen unterstützen UTF-16. Verwenden Sie babun babun.github.io . Es fungiert als Wrapper um Cygwin, bietet aber viele Dinge aus der Box.
Sahil Singh

9

Suche mit einem regulären Ausdruck:

^.*(help).*$

2
Was ist mit dem Löschteil?
Peter Mortensen

1
@ PeterMortensen Finden \n\n, ersetzen durch `` (nichts)
Leo

6

Wenn Sie unter Windows arbeiten , versuchen Sie es findstr. Tools von Drittanbietern werden nicht benötigt:

findstr /V /L "searchstring" inputfile.txt > outputfile.txt

Es unterstützt auch Regex! Lesen Sie einfach die Hilfe des Tools findstr /?.

PS Wenn Sie mit großen, großen Dateien (wie 400-MB-Protokolldateien) arbeiten möchten, ist ein Texteditor nicht sehr speichereffizient. Wie bereits erwähnt, sind Befehlszeilentools der richtige Weg. Aber unter Windows gibt es kein Grep, also ...

Ich habe dies gerade für eine 1-GB-Protokolldatei ausgeführt, und es hat buchstäblich 3 Sekunden gedauert.

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.