我有一个复杂的 grok 过滤器表达式...是否可以获得此过滤器转换为的正则表达式?
问问题
822 次
1 回答
2
您可以使用一个简单的 Perl 脚本来执行此操作,该脚本读取模式文件并用%{PATTERN}
它所基于的实际正则表达式替换这些内容 - 您必须对其进行一些自定义,但它显示了如何做到这一点:
#!/usr/bin/perl
# this is the path to your grok-patterns file
open(F,"patterns/grok-patterns");
while (<F>) {
chomp;
if (/^(\S+) (.*)/) {
$pattern{$1} = $2;
}
}
close(F);
# this is the grok pattern I want to expand
$pattern='%{IP:junk} %{COMBINEDAPACHELOG:junk2}';
while ($pattern =~ /(%\{([^:\}]+):?[^\}]*\})/) {
$name = $2;
substr($pattern,$-[0],$+[0]) = $pattern{$name};
}
print $pattern,"\n";
于 2014-10-23T16:18:14.737 回答