正则表达式匹配时间字符串

时间:2018-10-31 12:54:45

标签: regex splunk

努力从日志消息中提取主机名,当日期从2位变为一位数时(例如从10月31日到11月1日),它会被搞糊涂,关键字的提取开始失败...这里有一些日志需要提取主机名

  • 11月1日00:00:21 akdcs20.ftc.abcd-ipsn AKDCS20 fpc0 LBCM-L2,brcm_port_learning_config(),1258:(brcm_port_learning_config:1258)设置L2学习单元:0,port_num:44,learn_flg 5
  • 11月1日01:27:16 spnztpm01.abcd-ipsn 553177:LC / 0/0 / CPU0:11月1日 01:27:16.040:ifmgr [200]:%PKT_INFRA-LINEPROTO-5-UPDOWN:行 接口TenGigE0 / 0/0 / 1.172153上的协议,将状态更改为Up

  • 10月31日23:59:56 akdcs19.ftc.abcd-ipsn AKDCS19 ufdd [1679]: ufd_group_config_if_lookup ifname ae4

对于以上三行,我要提取

  • akdcs19.ftc.abcd-ipsn
  • spnztpm01.abcd-ipsn
  • akdcs20.ftc.abcd-ipsn

我正在使用的当前正则表达式是 ^(?:[^ \n]* ){4}(?P<devicename1>[^ ]+)

2 个答案:

答案 0 :(得分:2)

您可以使用

\s\d{2}(?::\d{2}){2}\s+(?P<devicename1>\S+)

请参见regex demo

或者,一个更明确的模式:

^\w+\s+\d+\s+\d{2}(?::\d{2}){2}\s+(?P<devicename1>\S+)

请参见another demo

详细信息

  • ^\w+\s+\d+\s+-字符串的开头,1个以上的字符字符,1个以上的空格,1个以上的数字,1个以上的空格(即,确保我们找到正确的类似于时间的子字符串)
  • \d{2}-两位数字
  • (?::\d{2}){2}-:和两位数字的两个序列
  • \s+-超过1个空格
  • (?P<devicename1>\S+)-组“ devicename1”:一个或多个非空格字符。

答案 1 :(得分:1)

考虑日期部分,始终是带有3个字符的月份,带有1-2个字符的日期以及带有HH:MM:ss的时间:

^(?:\w{3}\s\d{1,2}\s\d{2}:\d{2}:\d{2}\s)(?P<devicename1>[^ ]+)

Regex 101