Zeilen in Datei löschen, die bestimmten Begriff enthalten
Thorsten Steffen
- perl
Hi,
ich möchte aus einer Log-Datei per perl-script Zeilen löschen, die einen bestimmten Begriff enthalten.
Kann mir jemand sagen, wie ich die Datei zeilenweise einlese und nur die gefilterten Zeilen wegschreibe ?
Gruß und Danke
Thorsten
Hallo Thorsten!
Du hast zwei Möglichkeiten:
Zum Einen kannst Du eine temporäre Datei anlegen und beim Einlesen mit RexExps abtesten, ob die Zeile gültig ist oder nicht. Ist sie gültig, wird sie in die temp-Datei übernommen, ansonsten nicht. Am Schluß wird die Temporäre Datei per löschen und umbenennen zur Hauptdatei.
Die zweite Möglichkeit. Die erste Datei in ein Array übernehmen, dann das Array abarbeiten und die Datei dadurch neu aufbauen. (Dabei auch durch RexExps-Test die entsprechenden Zeilen wegfallen lassen.)
Bis denne,
Dennis
Hallo Thorsten,
ich möchte aus einer Log-Datei per perl-script Zeilen löschen, die einen bestimmten Begriff enthalten.
Direkt die Zeilen zu löschen, ist glaube ich etwas arg umständlich ;-) Es gibt aber mehrere möglichkeiten das denoch durchzuführen:
Bei Beiden Varianten musst Du entweder die Datei zum Lesen öffnen/schliesen und anschließend wieder zum Überschreiben öffnen/schließen, oder die Datei zum Lesen und Schreiben öffenen, den Inhalt nach dem Einlesen löschen, und anschließend die gefilterte Version reinschreiben.
Die letzte Version ist sicherlich vorzuziehen, da hier zusammen mit Filelocking wohl am ehesten gewährleistet ist, daß Dein Logger nicht versucht, zwischen Lesen und Schreiben des Filters einen Eintrag zu setzen.
Für die Durchführung benötigst Du open(), flock(), while, <HANDLE>, print()/push(), unless, m/PATTERN/, close() in der richtigen Reihenfolge ;-))
Gruß AlexBausW
Hallo nochmal,
Für die Durchführung benötigst Du open(), flock(), while, <HANDLE>, print()/push(), unless, m/PATTERN/, close() in der richtigen Reihenfolge ;-))
Kaum hatte ich es abgeschickt, fiel mir auf, daß für Version 1) natürlich noch 'foreach' oder 'for' benötigt wird :-) (obwohl 'while' wohl auch geht, zumindest mit 'shift' ;-)
Gruß AlexBausW