script um logfile zu monitoren/anzupassen

Dieses Thema im Forum "Ruby, php, Perl, Python ..." wurde erstellt von likwitt, 10.08.2009.

  1. #1 likwitt, 10.08.2009
    likwitt

    likwitt Jungspund

    Dabei seit:
    25.10.2006
    Beiträge:
    21
    Zustimmungen:
    0
    Hallo zusammen,

    ich hoffe hier kann mir jemand helfen:-)
    Folgendes Problem.
    Ich benötige ein script (perl), mit dem ich bestimmte logfiles "überwachen" kann, um daraufhin bestimmte Werte lösche.
    Als Beispiel -->
    Ich habe ein test.log mit folgenden Zeilen:

    1. Text Text kshddhez : 123 : Name :root
    2. Text Text kksdhhdwi : 92383 : Name :user1
    3. Text Text öladjwlkdnd : 123 : Name :root
    4. ....... Name: user3
    ... ...

    jedesmal wenn ein neuer Eintrag in das logfile kommt, sollen die Namen (bzw. alles hinter "Name :") gelöscht werden.
    mit
    sed 's/'SUCHE'/'ERSETZE'/g' *
    kann ich bestimmte Werte ersetzten,aber wie lautet der Befehl um nach einem Bestimmten String (Name :) den Rest der Zeile zu löschen?

    Ich hoffe Ihr könnt mir hier weiterhelfen :-)!

    thx schonmal für Tipps & links:-)
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 HeadCrash, 11.08.2009
    Zuletzt bearbeitet: 11.08.2009
    HeadCrash

    HeadCrash Routinier

    Dabei seit:
    16.05.2009
    Beiträge:
    482
    Zustimmungen:
    1
    Ort:
    Bayern
    Moin,

    bin ja absolut kein sed Fan aber auf die schnelle:
    Code:
    $ cat dummyfile
    test test test:123:Name:root
    zwei zwei zewei:12345:Name:user1
    drei vier fünf:123:Name:root
    $ cat dummyfile | sed 's/:Name:.*$/:Name:/g'
    test test test:123:Name:
    zwei zwei zewei:12345:Name:
    drei vier fünf:123:Name:
    
    Wobei es aber meines erachtens der elegantere Weg das Logging so zu ändern das der Name nicht mit Protokoliert wird.

    mfg
    HeadCrash
     
  4. #3 likwitt, 11.08.2009
    likwitt

    likwitt Jungspund

    Dabei seit:
    25.10.2006
    Beiträge:
    21
    Zustimmungen:
    0
    danke für die Antwort.
    ich hatte mir das in etwa so gedacht
    PHP:
    sed "s/\(.* : Name :\).*/\1/" file1
    aber leider klappt das auch nicht ganz:-(
    bei deinem Beispiel wird die Leerstelle nicht berücksichtigt.

    Habe ich wohl leider nicht richtig Beschrieben, sorry.

    PHP:
    cat dummyfile
    test test Name test
    :123:Name ist:root
    zwei ist zwei z Name ewei
    :12345:Name ist:user1
    drei ist vier name fünf
    :123:Name ist:root
    Wie müsste hier dein sed lauten?
    $ cat dummyfile | sed 's/:Name ist:.*$/:Name ist:/g'

    klappt leider nicht. Aber finde nicht wie ich "zwei aneinandere gereite Wörter ersetzen kann.

    Dann zum zweiten Problem - eventuell hier eine idee, wie man regelmässig den timestamp auf leichte weise überprüfen kann?
    Momentaner Ansatz wäre
    Schritt 1. den funktionierenden sed durchführen, und cp des "bereinigten files".
    Schritt 2. "bereinigtes file" als "vergleich" nutzten
    PHP:
    if [ bereinigtes file -nt .neuesfile ]; then sed cp 
    Wäre dies ein möglicher ansatz?
    thx
     
  5. #4 HeadCrash, 11.08.2009
    Zuletzt bearbeitet: 11.08.2009
    HeadCrash

    HeadCrash Routinier

    Dabei seit:
    16.05.2009
    Beiträge:
    482
    Zustimmungen:
    1
    Ort:
    Bayern
    Musst das Leerzeichen escapen

    Code:
    $ cat dummyfile | sed 's/:Name\ ist:.*$/:Name\ ist:/g'
    test test test:123:Name ist:
    zwei zwei zewei:12345:Name ist:
    drei vier fünf:123:Name ist:
    
    EDIT:
    die Version wie du es machen wolltest:

    Code:
    $ cat dummyfile | sed 's/^\(.*:Name\ ist:\).*$/\1/g'
    test test test:123:Name ist:
    zwei zwei zewei:12345:Name ist:
    drei vier fünf:123:Name ist:
    
     
  6. #5 likwitt, 11.08.2009
    likwitt

    likwitt Jungspund

    Dabei seit:
    25.10.2006
    Beiträge:
    21
    Zustimmungen:
    0
    Thx!!!!! --> klappt beides nun wunderbar:-))
    somit eigentlich egal welches ich zum bereinigen nutze.
    hätte wohl ewig gesucht bis ich den Fehler gefunden hätte:-)

    eventuell noch ne Idee zu dem timestamp:-)?
    oder wäre die Lösung mit dem filevergleich denkbar? (wobei ich hier ja einen cronjob benötigen würde der dies regelmässig vergleicht?)
     
  7. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  8. #6 HeadCrash, 11.08.2009
    HeadCrash

    HeadCrash Routinier

    Dabei seit:
    16.05.2009
    Beiträge:
    482
    Zustimmungen:
    1
    Ort:
    Bayern
    Ich weiß gar nicht ob du da großartig mit Timestamps arbeiten musst, oder einfach per Cron alle Stunde das Logfile durch sed jagen. Kommt darauf an wie groß das Logfile an der Stelle ist.

    Ansonsten ist deine Idee mit "-nt" sicherlich das einfachste, da es nur dann durch das Logfile rennt wenn sich wirklich was getan hat.
    Code:
    [ logfile -nt bereinites.logfile ] && sed logfile > bereinigtes.logfile
    
    Sed arbeitet in jedem Fall das komplette Log durch.
     
  9. #7 likwitt, 11.08.2009
    Zuletzt bearbeitet: 11.08.2009
    likwitt

    likwitt Jungspund

    Dabei seit:
    25.10.2006
    Beiträge:
    21
    Zustimmungen:
    0
    hmm. ich habe mehrere files dummydatum1 dummydatum2 usw., in denen der Namen bereinigt werden müsste.
    dann wäre wohl der cronjob eher das richtige?
    --> fällt mir gerade auf dass die Lösung mit dem Vergleich nicht wirklich geht, da sich der Filenamen aufgrund des Datums eh ständig ändert:-(

    bleibt quasi ein grep auf dummy*.log der mir die logfiles aufliststet , in denen "Name ist :" vorkommt. und auf diese *.log´s dann das sed?

    Code:
    grep "Name ist :" *.log
    gibt mir ja alle Zeilen aus in denen der gesuchte string vorkommt.
    Mich intressieren allerdings nur die logfiles ansich.
    Wie verknüpfe ich dann das sed auf die verschiednene logs müsste mit | gehen?

    Hmmm - selbst simple sachen scheinen mir ein Rätsel:-)? Wenn man sogut wie nie was scripten muß, dann ist man ewig auf Fehlersuche:-(



    oder wäre auch soetwas denkbar
    Code:
    cat dummyfile*.log | sed 's/^\(.*:Name\ ist:\).*$/\1/g'
    müsste eigentlich gehn --> geht:-)!
    Allerdings, wie stelle ich sicher das inputfilename = outputfilename ist? sind ja mehrere

    bin nur nicht mit der cron lösung so wirklich zufrieden:-(
    Perl mit sleep wäre hier doch auch denkbar?,
    bezw. genauer gefragt - wie würde das perlscript aussehen, wenn ich den sed - befehl alle x Sec //sleep x sec// ausführen möchte??

    **********************
    **********************
    Problem gelöst:
    dachte ich schreib das zumindest hier rein, bevor sich jemand die Mühe macht:-)
    Eventuel hat ja jemand mal ein ähnliches Problem.
    Habe das ganze mit einem shell script "gelöst"

    Code:
    #!/bin/sh
    #du zu bereinigenden Files definieren
    File1=/Pfad/dummy1.log
    File2=/Pfad/dummy2.log
    
    while :
     do
       cat "$File1" | sed 's/^\(.*Name\ ist\).*$/\1/g' > /var/tmp/Filetmp1
       cat "$File2" | sed 's/^\(.*Name\ ist\).*$/\1/g' > /var/tmp/Filetmp2
    
      mv /var/tmp/Filetmp1 "$File1"
      mv /var/tmp/Filetmp2 "$File2"
    #chown user:gruppe "$File1" "$File2"
     
    sleep 15;
    done
    
    Das ganze wird dann über ein anderes script im hintergrund gestartet (start/stop/status/restart).
     
Thema:

script um logfile zu monitoren/anzupassen

Die Seite wird geladen...

script um logfile zu monitoren/anzupassen - Ähnliche Themen

  1. Shell Script zum Exportieren eines Logfile in eine Oracle Datenbank

    Shell Script zum Exportieren eines Logfile in eine Oracle Datenbank: Moin an alle Ich will ein Shell script bauen was mir eine Log dateien von einer HP-Ux Maschine in eine Oracle datenbank absaved Mein Log wird...
  2. Bräuchte Hilfe bei Backupscript mittels Bash und cronjob

    Bräuchte Hilfe bei Backupscript mittels Bash und cronjob: Es soll für bestimmte Ordner Archivierung aller Dateien(Logfiles), die älter als 30 Tage sind machen. Am besten einmal täglich nachts irgendwann....
  3. Bashscript aus Debian6 läuft nicht auf Debian7

    Bashscript aus Debian6 läuft nicht auf Debian7: Hallo an alle, nachdem ich ein Skript von squeeze auf wheezy kopiert habe und ausführte, erschienen gleich wilde Fehlermeldungen, nach denen ich...
  4. Shell Script Problem

    Shell Script Problem: Hallo zusammen, ich arbeite momentan mit einem Plagiat Tool, die ich über Git Bash ausführe. Es wird im Endeffekt ein Link generiert, die ich...
  5. Externes Programm mit Script ausführen?

    Externes Programm mit Script ausführen?: Hallo, ich würde gern ein Script zum klonen von festplatten schreiben z.B. mit dem Programm Mondo Rescue. Ist es möglich externen Programmen...