我在后台运行了一个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:值重复了0次或更多次。
所以问题是,哪个正则表达式将允许我获取所有这些信息?
发布于 2013-11-04 15:38:22
基本上,对于日志行的左边部分,可以使用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: lolhttps://stackoverflow.com/questions/19767999
复制相似问题