努力从日志消息中提取主机名,当日期从2位变为一位数时(例如从10月31日到11月1日),它会被搞糊涂,关键字的提取开始失败...这里有一些日志需要提取主机名
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
对于以上三行,我要提取
我正在使用的当前正则表达式是
^(?:[^ \n]* ){4}(?P<devicename1>[^ ]+)
答案 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>[^ ]+)