2016-08-01 117 views
0

如何僅從像這樣的字符串中提取時間部分。從日誌文件中提取日誌時間

[20/06/2016 15:55:42.079] <Messenger> Echo test request 

我只是想獲得這部分15:55:42.079從日誌。

+0

還張貼問題時,請記住,你我們已經向我們展示了以代碼的形式 - 努力解決這個問題的努力。 –

回答

1

最簡單的方法是用參數擴展子去除,如:

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

如果您有任何疑問,請告知我。

3

你可以試試這個:

awk -F']| ' '{print $2}' <<< "STRING" 

測試:

$ awk -F']| ' '{print $2}' <<< "[20/06/2016 15:55:42.079] Echo test request" 
15:55:42.079 
+1

這是一個更好的方法,然後我的:) ++ – sjsam

2

sed太是你的朋友:

$ sed -E 's/^[^[:blank:]]*[[:blank:]]([^]]*)\].*$/\1/' 38693974 
15:45:42.079 
15:55:12.079 
15:55:42.079 
15:56:42.079 
+2

謝謝它的工作原理... awk很方便 – simbabarry

+1

爲什麼不只是sub和打印$ 2? – 123

+0

@ 123:我刪除了awk部分,因爲其他答案更好地解決了這個問題。是的 !你是對的'sub和打印$ 2'會更好我的刪除方法。 ;) – sjsam