Ich schreibe ein Shell-Skript, um einen "Schwanz" in einer wachsenden Protokolldatei zu erstellen. Dieses Skript akzeptiert Parameter, nach denen gesucht wird, und inkrementell die Ausgabe auf ihnen.GREP-Zeichenfolgen dynamisch erstellen
Zum Beispiel, wenn das Skript wie folgt aufgerufen wird:
logs.sh string1 string2
sollte es übersetzen:
tail -f logs.txt | grep string1 | grep string2
Ich baue die Liste der grep Strings wie folgt aus:
full_grep_string=""
for grep_string in $*
do
full_grep_string="$full_grep_string | grep $grep_string"
done
Die Zeichenfolge ist korrekt erstellt, aber wenn ich versuche, es schließlich zu den Schwanz Befehl zu markieren, so ...
tail -f $LOG_FILE_PATH $full_grep_string
... die grep gilt nicht, und ich bekomme die ungefilterten Protokolle.
Fehle ich hier etwas? Oder gibt es einen einfacheren Weg, dies zu tun?
Nur eine kleine Klarstellung: Ist die Idee, dass Ihr Skript ausgeben sollte die Zeilen der Protokolldatei, das beide enthält string1 und string2, oder wollten Sie Zeilen finden, die eine der Strings enthalten? –
Auch, welche Shell verwenden Sie? Bash? –
für mich auf Debian Lenny Ich habe das Problem, dass zwei Grep kombiniert nicht funktionieren mit Schwanz -f aber mit nur Schwanz – tuergeist