Ich verwende gradle run
, um einen REST-Server zu starten. Die Ausgabe des REST-Servers sieht folgendermaßen aus:
XXX.XXX.XX.XXX - <moreinfo>
randomtext
randomtext
XXX.XXX.XX.XXX - <moreinfo>
XXX.XXX.XX.XXX - <moreinfo>
randomtext
XXX.XXX.XX.XXX - <moreinfo>
XXX.XXX.XX.XXX
Hier ist eine IP-Adresse, zufälliger Text sind Fehlermeldungen. Alle Ausgaben sind leider an stdout gerichtet.
Wie kann ich alle Zeilen, die mit einer IP-Adresse beginnen, an eine aufgerufene Datei err.log
und jede andere Zeile an leiten all.log
?
gradle run
Kann leider nur einmal gestartet werden und hört nicht auf, da es sich um einen REST-Server handelt.
Vielleicht eine verwenden tee
, grep
Kombination?
quelle
err.log
ist leer und alle Ausgaben werdenall.log
mit demtee
obigen Befehl umgeleitet .err.log
vorhanden, wurde der Befehl ausgeführt, aber es wurde nichts ausgegeben.grep -E
mit dem Ausdruck, der im Befehl awk verwendet wird, sollte übereinstimmen, oder hier.all.log
sie keine übereinstimmenden Zeilen im grep-Ausdruck enthält?all.log
underr.log
mit einem alten Befehl. Entschuldigung für die Verwirrung. Danke, du bist großartig :)) !!So sieht es aus wie
gradle run
nicht mit nicht entsprichttee
,pee
,grep
und io-Umleitung. Nach 4096 Bytes hört es immer auf zu lesen.Um dieses Problem zu umgehen, habe ich
read
jede Zeile vongradle run
. Ich habe es noch nicht getestet, aber ich denke, dass das Lesen einer Zeile mit mehr als 4.000 Zeichen ebenfalls fehlschlagen wird.Wie auch immer, hier ist der Code, um meine Frage speziell zu lösen:
quelle
read -r line
undprintf '%s\n' "$line"
einige zu vermeiden Rand Fällen brechen Dinge.