Wie extrahiere ich den Zeitteil nur aus einer Zeichenfolge wie dieser.Protokollzeit aus Protokolldatei extrahieren
[20/06/2016 15:55:42.079] <Messenger> Echo test request
Ich will nur diesen Teil bekommen 15: 55: 42,079 aus dem Protokoll.
Wie extrahiere ich den Zeitteil nur aus einer Zeichenfolge wie dieser.Protokollzeit aus Protokolldatei extrahieren
[20/06/2016 15:55:42.079] <Messenger> Echo test request
Ich will nur diesen Teil bekommen 15: 55: 42,079 aus dem Protokoll.
Der einfachste Weg ist mit Parametern Expansion und Teilzeichenfolge Entfernung, zB:
var="[20/06/2016 15:55:42.079] Echo test request"
tm=${var%]*} ## remove all from right including ']'
tm=${tm#* } ## remove all from left including ' '
echo "time $tm" ## your time is now in $tm
über den Betrieb ${var%]*}
nutzt den %
Operator, der aus den Werken von rechts nach links alles entfernt '*'
, bis dem ]
ist erreicht. Jetzt auf den Rest der Zeichenfolge [20/06/2016 15:55:42.079
ein dieser Punkt, benötigen Sie einfach den Operator #
, die von links nach rechts von Anfang an entfernt. Hier entfernen wir '*'
(alles) einschließlich der ' '
nur 15:55:42.079
in der Variablen tm
verlassen.
Lassen Sie mich wissen, wenn Sie Fragen haben.
Sie können dies versuchen:
awk -F']| ' '{print $2}' <<< "STRING"
Test:
$ awk -F']| ' '{print $2}' <<< "[20/06/2016 15:55:42.079] Echo test request"
15:55:42.079
Das ist ein besserer Ansatz als meiner :) ++ – sjsam
sed
Auch das ist dein Freund:
$ sed -E 's/^[^[:blank:]]*[[:blank:]]([^]]*)\].*$/\1/' 38693974
15:45:42.079
15:55:12.079
15:55:42.079
15:56:42.079
Danke Es funktioniert ... awk ist handlich – simbabarry
Warum nicht nur sub und drucken $ 2? – 123
@ 123: Ich habe den awk-Teil gelöscht, weil die andere Antwort das Problem besser anspricht. Und ja ! Du hast recht "sub und print $ 2" wäre mit meinem gelöschten Ansatz besser gewesen. ;) – sjsam
auch wenn Fragen veröffentlichen, beachten Sie bitte, dass Sie Wir müssen uns die Mühe - in Form von Code - zeigen, um das zu lösen. –