89 Stimmen

Löschen bestimmter Zeilen in einer txt-Datei über eine Batch-Datei

Ich habe eine generierte txt-Datei. Diese Datei enthält bestimmte Zeilen, die überflüssig sind und entfernt werden müssen. Jede Zeile, die entfernt werden muss, hat eine von zwei Zeichenfolgen in der Zeile: "ERROR" oder "REFERENCE". Diese Zeichen können an beliebiger Stelle in der Zeile erscheinen. Ich möchte diese Zeilen löschen, aber alle anderen Zeilen beibehalten.

Wenn die txt-Datei also wie folgt aussieht:

Good Line of data
bad line of C:\\Directory\\ERROR\\myFile.dll
Another good line of data
bad line: REFERENCE 
Good line

Ich möchte, dass die Datei wie folgt aussieht:

Good Line of data
Another good line of data
Good line

TIA.

126voto

paxdiablo Punkte 809679

Verwenden Sie das Folgende:

type file.txt | findstr /v ERROR | findstr /v REFERENCE

Dies hat den Vorteil, dass die Standardwerkzeuge des Windows-Betriebssystems verwendet werden können, anstatt sed/awk/perl und dergleichen suchen und installieren zu müssen.

In der folgenden Abschrift sehen Sie, wie es funktioniert:

C:\\>type file.txt
Good Line of data
bad line of C:\\Directory\\ERROR\\myFile.dll
Another good line of data
bad line: REFERENCE
Good line

C:\\>type file.txt | findstr /v ERROR | findstr /v REFERENCE
Good Line of data
Another good line of data
Good line

59voto

Rick Punkte 4259

Sie können die gleiche Lösung wie @paxdiablo erreichen, indem Sie nur findstr selbst verwenden. Es besteht keine Notwendigkeit, mehrere Befehle miteinander zu verknüpfen:

findstr /V "ERROR REFERENCE" infile.txt > outfile.txt

Wie das im Einzelnen funktioniert:

  • /v findet Zeilen, die nicht mit dem Suchbegriff übereinstimmen (derselbe Schalter, den @paxdiablo verwendet)
  • Wenn der Suchstring in Anführungszeichen steht, wird eine ODER-Suche durchgeführt, wobei jedes Wort verwendet wird (Trennzeichen ist ein Leerzeichen)
  • findstr kann eine Eingabedatei verarbeiten, Sie müssen den Text nicht mit dem Befehl "type" eingeben
  • "> outfile.txt" sendet die Ergebnisse in die Datei outfile.txt, anstatt sie auf der Konsole auszugeben. (Beachten Sie, dass die Datei überschrieben wird, wenn sie existiert. Verwenden Sie stattdessen ">> outfile.txt", wenn Sie anhängen möchten.)
  • Sie können auch den Schalter /i hinzufügen, um die Groß- und Kleinschreibung zu ignorieren.

7voto

Rob Punkte 3548

Wenn Sie sed haben:

sed -e '/REFERENCE/d' -e '/ERROR/d' [FILENAME]

Wo FILENAME ist der Name der Textdatei mit den guten und schlechten Zeilen

1voto

mirod Punkte 15573

Wenn Sie Perl installiert haben, dann perl -i -n -e"print unless m{(ERROR|REFERENCE)}" sollte das genügen.

0voto

Hary Dee Punkte 21

Es scheint, dass die Verwendung des FIND anstelle der FINDSTR kann auch Unicode-Zeichen unterstützen. z.B. type file.txt | find /v ""

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X