(geschlossen)tail -f | grep --> Problem

Hinweis: In dem Thema (geschlossen)tail -f | grep --> Problem gibt es 21 Antworten auf 3 Seiten. Der letzte Beitrag () befindet sich auf der letzten Seite.
  • Hallo an alle,


    ich bin es mal wieder. Fast schon täglich stell ich hier neue Fragen rein und freue mich immer aufs neue das mir hier Linux Cracks helfen.
    Zu meinem Problem:


    Ich möchte eine text.txt auf einen Bestimmten Zeileninhalten prüfen.
    Es soll ein skript geschrieben werden, welches die Datei text.txt
    immer wieder neu überprüft ob der neu hinzugekommene Text den bestimmten Zeileninhalt beinhaltet.
    Ich habe bereits soetwas wie:


    `tail -f text.txt | grep "XXX"`


    probiert, jedoch liefer tail einfach nichts zurück.
    Rufe ich diesen Befehl in der shell als einziges Funktion auf,
    schreibe was in text.txt hinzu gibt er mir auch die Zeilen mit XXX aus.
    Benutze ich mein shell skript bleibt er sozusagen bei der oben genannten Zeile hängen.
    Ich denke es liegt daran, dass tail -f die Eigenschleife nicht einfach so beendet.
    Jedoch funktioniert das alles nur mit einem tail -f, da in die Datei unter Umständen auch
    Inhalte größer mehrerer 100 Zeilen reingeschrieben werden und nur die aktuell reingeschriebenen Zeilen für mich interessant sind.
    Hoffe es ist klar was ich meine.


    Gruß

    Für den Inhalt des Beitrages 11115 haftet ausdrücklich der jeweilige Autor: suerte

  • Bash
    #!/bin/bash
    #set -x
    
    
    while [ 1 ]
    do  
      `tail -f test.txt | > temp.txt`
      echo "TEST"
      echo `cat temp.txt`
    done


    das kleine shell skript sollte jegliche eingabe nach temp.txt umleiten.
    das skript bleibt korrekter weise bei `tail -f ....` stehen und wartet auf eingabe bzw. veränderung der test.txt. Nachdem ich eine neue Zeile in test.txt geschrieben habe, hüpft das skript weiter und gibt TEST aus. Dann steht es wieder bei `tail ...` und wartet jedoch steht nichts in der temp.txt!!!

    Für den Inhalt des Beitrages 11119 haftet ausdrücklich der jeweilige Autor: suerte

  • Hi


    Wenn ich in der Konsole

    Code
    tail -f test.txt  > temp.txt

    eingebe (ohne | ),wird alles in die temp.txt eingefügt.
    Aber im Skript funktoniert es auch nicht.
    Muss da erst mal ein paar Bücher wälzen :81:

    Für den Inhalt des Beitrages 11131 haftet ausdrücklich der jeweilige Autor: D_Dau

  • Hmmm


    Ich würde mal behaupten, dass das geht.


    Probier mal das hier:



    Entweder wird deine Datei nicht geändert, oder dein Suchbegriff kommt in der Datei nicht mit solchen Anführungszeichen an.

    Für den Inhalt des Beitrages 11198 haftet ausdrücklich der jeweilige Autor: }ls{

  • Äh, da war ich zu voreilig:


    deine Loesung lautet
    grep --line-buffered

    Für den Inhalt des Beitrages 11280 haftet ausdrücklich der jeweilige Autor: }ls{

  • Respekt.


    Das ist Unix.


    (Wieso bin ich da nciht drauf gekommen *grummel*)

    Für den Inhalt des Beitrages 11347 haftet ausdrücklich der jeweilige Autor: }ls{

  • Genau. Nichts geht über eine gute Shell und über die riesige Zahl möglicher Lösungen für ein Problem in UNIX.

    Für den Inhalt des Beitrages 11349 haftet ausdrücklich der jeweilige Autor: tf.bb

  • hallo,


    es funktioniert keines von den angebotenen lösungen.
    die variante von }ls{ gibt auch "Ui es hat funktioniert" aus wenn man echo "Komisch" >> t auskommentiert.

    Für den Inhalt des Beitrages 11652 haftet ausdrücklich der jeweilige Autor: suerte

  • Zitat von suerte;11652

    hallo,


    es funktioniert keines von den angebotenen lösungen.
    die variante von }ls{ gibt auch "Ui es hat funktioniert" aus wenn man echo "Komisch" >> t auskommentiert.


    Nun ja. Das kann ja wohl nicht anders sein.
    Denn es wird nun einmal - solange keine Kontrollstrukturen, wie if ...fi, while oder dergleichen dort stehen - schlicht sequentiell abgearbeitet.


    Du solltest dich mal ein wenig in die bash einarbeiten.
    Gute Anlaufstellen sind:
    http://bash-hackers.org/wiki/
    http://mywiki.wooledge.org/BashFAQ


    Was aber auch geht:

    Code
    tail -f /var/log/messages | tee DeineDatei

    gegebenenfalls kannst du noch die Ausgabe auf stdout nach null schicken...


    Have fun.


    Und wenn wieder alles mal nicht geht,
    schreibe nicht, dass es nicht geht, sondern poste deine Versuche samt den Fehlermeldungen.
    "Geht nicht" ist keine Information.
    Hast du schon einmal in einem Supportforum gelesen:
    "Uhi, also ich habe kein Problem: Erst neulich funktionierte ganz prima.... "?


    "Geht nicht" hilft niemanden. Dir am wenigsten.
    Das kostet nur Zeit.
    Du zwingst zum ständigen Nachfragen.

    Für den Inhalt des Beitrages 11653 haftet ausdrücklich der jeweilige Autor: }ls{