2017-02-16 3 views
1

Ich bin in meinem Home-Verzeichnis und gebe einen Pfad zu zwei verschiedenen Dateien, die ich schwänzen möchte. Jede Datei greife ich nach 2 Variablen. Mein Problem ist, dass dieses Skript aus irgendeinem Grund nicht in die saveFile.txt schreibt. Die Datei saveFile.txt befindet sich im selben Verzeichnis wie das Skript, das ich gerade ausführe.grep nicht in Datei schreiben

#!/bin/sh 
tail -f <path1> -f <path2> | egrep -i --line-buffered '<variable1>|<variable2>' > saveFile.txt 

Für einen zusätzlichen Bonus gibt es eine Möglichkeit, Abstand zur Ausgabe hinzuzufügen, die in die Datei durch das gleiche Skript ausgelöst wird? Mir wurde gesagt, dass es vielleicht einfacher ist, das in Ruby oder Python zu schreiben, haha.

Danke!

+1

Sind Sie sicher, dass die 'egrep' Ausgabe auf' stdout' produziert? Können Sie es versuchen, ohne in die Datei zu schreiben, um zu sehen, ob die Ergebnisse da sind? – Inian

+1

Hast du wirklich alles in einer Zeile wie hier gezeigt? – choroba

+0

Ich habe versucht, einen einzigen Schwanz und einzelne egrep w/o in eine Datei schreiben und es gab mir die Ausgabe. –

Antwort

0

Hier ist ein funktionierendes Beispiel:

tail -f ./listener/alert/log.xml ./listener/trace/listener.log | grep -P --line-buffered '[A-z]+' | tee ~/foo.txt 

Anmerkung: tail muss nicht die mehrere -f args. Ich benutze Perl Regex in Grep mit -P Flag. Und schließlich, ich mag es, die Ausgabe auf der Konsole zu sehen, sowie senden Sie es in eine Datei, so dass ich tee verwenden.

+0

Nur um sicherzustellen, dass ich die man-Seiten über die Verwendung von Tee verstehe, ist es dasselbe wie die Verwendung von '> saveFile.txt', außer dass es auch die Ausgabe anzeigt? Und es tut mir leid, wenn es eine dumme Frage ist, aber warum './' vor der Textdatei verwenden? Vielen Dank! –

+0

(1) Ja, tee gibt die Ausgabe an die Konsole UND an eine Datei ab. Praktisch. Es ist das gleiche wie >>, was bedeutet, dass es an die Datei angehängt wird. (2) Ich verwende relative Pfade in meinem Beispiel, so dass der Punkt-Slash einfach bedeutet, den Pfad im aktuellen Verzeichnis zu starten, in dem der Tail-Befehl ausgeführt wird. Sie könnten genauso einfach einen absoluten Pfad verwenden, z./var/log. – gregory