我在后台运行了一个snmptrapd守护程序,并将所有陷阱记录到一个文件中,我试图在perl程序中解析该日志。
正在记录SNMP v2c陷阱,如下所示:
SNMPv2[**]2013-11-4[**]13:16:49[**]UDP: [127.0.0.1]:57819->[127.0.0.1][**].1.3.6.1.6.3.1.1.4.1.0 = OID: .1.3.6.1.4.1.8072.2.3.0.1 .1.3.6.1.4.1.8072.2.3.2.1 = INTEGER: 30 .1.3.6.1.4.1.8072.2.3.2.2 = STRING: lol
我已使用正则表达式成功解析了OID和远程IP地址,但我无法解析所有剩余的陷阱值。那些是:
.1.3.6.1.4.1.8072.2.3.2.1 = INTEGER: 30 .1.3.6.1.4.1.8072.2.3.2.2 = STRING: lol
语法似乎很简单:TRAP_STUFF = TYPE:VALUE重复0次或更多次。
所以问题是哪个正则表达式可以让我获取所有这些信息?
答案 0 :(得分:1)
基本上,对于日志行的左侧部分,您可以使用while
逐块解析信息regex
。
my $str = ".1.3.6.1.4.1.8072.2.3.2.1 = INTEGER: 30 .1.3.6.1.4.1.8072.2.3.2.2 = STRING: lol";
while ($str =~ /([\.\d]+)\s=\s([^:]+):\s([\S]+)/g) {
my ($trap_stuff, $type, $value) = ($1, $2, $3);
print "trap_stuff: $trap_stuff\ntype: $type\nvalue: $value\n";
}
输出:
trap_stuff: .1.3.6.1.4.1.8072.2.3.2.1
type: INTEGER
value: 30
trap_stuff: .1.3.6.1.4.1.8072.2.3.2.2
type: STRING
value: lol