尝试获取值日期和时间而不是整个日志
${1} - Bash 中的命令行参数
${i} - for 循环中的数组项
grep -ERh "stopped" ems_*/SystemOut*.log | tail -1
现在的值是这样的
ems_inet1/SystemOut1.log:[6/8/17 10:47:45:896 SGT] 00000066 ServerCollabo A WSVR0024I: Server ems_inet1 stopped
在某些代码中,方括号中有多个值
ems_inet1/SystemOut1.log:[9/24/19 17:23:34:324 SGT] 00004442 SystemOut O 24 Sep 2019 17:23:34:324 [INFO] [ems_inet1] [CID-UIASYNC-16412]
在 sed 上尝试过 RegEx 但效果不佳
\[\d{2}\/\d{2}\/\d{2}\s+\d{2}:\d{2}:\d{2}:\d{3}\s+\w{3}\]
我只想要这个值
[6/8/17 10:47:45:896 SGT]
由@Bodo解决
答案1
在没有完整的实际数据的情况下,这个答案是基于一些猜测。
我假设
- 您的文件名不包含方括号 (
[]
) 和 - 您的数据始终在行首的括号中包含时间戳,并且
sed
您可以使用(编辑:修改正则表达式以捕获括号中的第一组,以防有更多组)对输出进行后处理。)
grep -ER "stopped" ems_rpt1/SystemOut.log | tail -1 | sed 's/[^[]*\(\[[^]]*\]\).*/\1/'
注意:您使用的选项-E
意味着“使用扩展正则表达式进行匹配”。在您的示例中仅使用简单的字符串,因此您可以使用 option-F
而不是-E
,这意味着“使用固定字符串进行匹配”。