it-swarm.com.de

Löschen Sie bestimmte 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, enthält eine von zwei Zeichenfolgen. "ERROR" oder "REFERENCE". Diese Token können an einer beliebigen Stelle in der Zeile erscheinen. Ich möchte diese Zeilen unter Beibehaltung aller anderen Zeilen löschen.

Also, wenn die txt-Datei so aussieht:

 Gute Datenzeile 
 Schlechte Zeile von C:\Directory\ERROR\myFile.dll 
 Eine weitere gute Datenzeile 
 Schlechte Zeile: REFERENCE 
Gute Linie

Ich möchte, dass die Datei so endet:

 Gute Datenreihe 
 Eine weitere gute Datenreihe 
 Gute Datenreihe 

TIA.

66
chrome

Verwenden Sie Folgendes:

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

Dies hat den Vorteil, dass Sie Standardtools unter Windows verwenden müssen, anstatt sed/awk/Perl und ähnliches zu finden und zu installieren.

Siehe dazu folgendes Protokoll in Betrieb:

 C: \> type file.txt 
 Good Line of Data 
 Bad Line of C:\Directory\ERROR\myFile.dll 
 Eine weitere gute Datenzeile 
 schlechte Zeile: VERWEIS 
 gute Zeile 
 
 C: \> Typ file.txt | findstr/v FEHLER | findstr/v REFERENCE 
 Gute Datenzeile 
 Eine weitere gute Datenzeile 
 Gute Datenzeile 
98
paxdiablo

Sie können dieselbe Lösung wie bei @ paxdiablo erzielen, indem Sie nur findstr für sich verwenden. Es ist nicht erforderlich, mehrere Befehle gleichzeitig auszuführen:

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

Details, wie das funktioniert:

  • / v findet Zeilen, die nicht mit der Suchzeichenfolge übereinstimmen (derselbe Schalter, den @paxdiablo verwendet)
  • befindet sich die Suchzeichenfolge in Anführungszeichen, wird eine OR) Suche mit jedem Wort durchgeführt (Trennzeichen ist ein Leerzeichen)
  • findstr kann eine Eingabedatei aufnehmen, Sie müssen den Text nicht mit dem Befehl "type" eingeben
  • "> outfile.txt" sendet die Ergebnisse an die Datei outfile.txt und druckt sie stattdessen auf Ihre Konsole. (Beachten Sie, dass die Datei überschrieben wird, falls vorhanden. Verwenden Sie stattdessen ">> outfile.txt", wenn Sie sie anhängen möchten.)
  • Sie können auch die Option/i hinzufügen, um eine Übereinstimmung ohne Berücksichtigung der Groß-/Kleinschreibung zu erzielen.
39
Rick

Wenn Sie sed haben:

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

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

5
Rob

Wenn Sie Perl installiert haben, sollte Perl -i -n -e"print unless m{(ERROR|REFERENCE)}" den Trick machen.

1
mirod