我正在尝试获取一个值,我只想要最后的日期和时间

我正在尝试获取一个值,我只想要最后的日期和时间

尝试获取值日期和时间而不是整个日志

${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,这意味着“使用固定字符串进行匹配”。

相关内容