Erstens, wenn Sie erwarten, dass diese Zeitstempel tatsächlich ein Ereignis darstellen, denken Sie daran, dass es wichtig ist, dies so nahe wie möglich an die Zeit zu halten, die die ursprüngliche Zeile haben würde, da viele Programme eine Zeilenpufferung durchführen (einige aggressiver als andere) statt eines Zeitstempels einer stattfindenden Aktion gedruckt worden.
Möglicherweise möchten Sie auch überprüfen, ob in Ihrem Befehl noch keine Funktion dafür integriert ist. Gibt beispielsweise ping -D
in einigen ping
Versionen die Zeit seit der Unix-Epoche vor jeder Zeile aus. Wenn Ihr Befehl jedoch keine eigene Methode enthält, gibt es einige Methoden und Tools, die verwendet werden können, unter anderem:
POSIX-Shell
Beachten Sie, dass viele Shells ihre Zeichenfolgen intern als Zeichenfolgen speichern. Wenn die Eingabe das Nullzeichen ( \0
) enthält, wird die Zeile möglicherweise vorzeitig beendet.
command | while IFS= read -r line; do printf '[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$line"; done
GNU awk
command | gawk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0 }'
Perl
command | perl -pe 'use POSIX strftime; print strftime "[%Y-%m-%d %H:%M:%S] ", localtime'
Python
command | python -c 'import sys,time;sys.stdout.write("".join(( " ".join((time.strftime("[%Y-%m-%d %H:%M:%S]", time.localtime()), line)) for line in sys.stdin )))'
Rubin
command | ruby -pe 'print Time.now.strftime("[%Y-%m-%d %H:%M:%S] ")'