如何仅从像这样的字符串中提取时间部分。从日志文件中提取日志时间
[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
还张贴问题时,请记住,你我们已经向我们展示了以代码的形式 - 努力解决这个问题的努力。 –