如何僅從像這樣的字符串中提取時間部分。從日誌文件中提取日誌時間
[20/06/2016 15:55:42.079] <Messenger> Echo test request
我只是想獲得這部分15:55:42.079從日誌。
如何僅從像這樣的字符串中提取時間部分。從日誌文件中提取日誌時間
[20/06/2016 15:55:42.079] <Messenger> Echo test request
我只是想獲得這部分15:55:42.079從日誌。
最簡單的方法是用參數擴展和子去除,如:
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
在以上操作${var%]*}
利用%
操作,從工作從右到左消除一切'*'
直到]
已達到。現在,在字符串[20/06/2016 15:55:42.079
的剩餘部分中,您只需要#
運算符,它從頭開始從左到右移除。在這裏,我們刪除'*'
(所有內容),其中包括' '
,在變量tm
中只保留15:55:42.079
。
如果您有任何疑問,請告知我。
你可以試試這個:
awk -F']| ' '{print $2}' <<< "STRING"
測試:
$ awk -F']| ' '{print $2}' <<< "[20/06/2016 15:55:42.079] Echo test request"
15:55:42.079
這是一個更好的方法,然後我的:) ++ – sjsam
sed
太是你的朋友:
$ sed -E 's/^[^[:blank:]]*[[:blank:]]([^]]*)\].*$/\1/' 38693974
15:45:42.079
15:55:12.079
15:55:42.079
15:56:42.079
謝謝它的工作原理... awk很方便 – simbabarry
爲什麼不只是sub和打印$ 2? – 123
@ 123:我刪除了awk部分,因爲其他答案更好地解決了這個問題。是的 !你是對的'sub和打印$ 2'會更好我的刪除方法。 ;) – sjsam
還張貼問題時,請記住,你我們已經向我們展示了以代碼的形式 - 努力解決這個問題的努力。 –