2016-08-01 119 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