我正在使用Splunk来解析一些日志,这些日志中嵌入了我们的"hub"和"comp"ID,在消息正文中.我需要使用字段提取RegEx将它们拉出来:HHHH-CCCC,其中数据如下所示:
Hub:[HHHH] Comp: [HHHH]
这是一个示例记录:
RecordID:[00UJ9ANUHO5551212] TrackingID:[1234ANUHO5551212] Hub:[0472] Comp:[N259]发生了一些事件,日志在这里:: [\ server\share\0472\N258\blah\blah\blah\somefile.txt ],没有例外.
从那以后,我想回来:
0472-N259
我正在努力学习(重新学习!30年前我学会了这些东西!)捕获小组,并想出了这个:
(?<=Hub:\[)([A-Z0-9]{4})
从那里我可以得到4个角色的集线器,但它不会让我这样做:
(?<=Hub:\[)([A-Z0-9]{4}) (?<=Comp:\[)([A-Z0-9]{4})
我有点亲近,但是我很沮丧,现在是时候回家了,所以我想也许可以帮助我一夜之间.百分之百的最佳答案(请解释解决方案).我保证在这个问题符合条件时回来奖励.答案不一定是splunk形式(with
),但这也很有帮助.
如果RegEx可以粘贴到http://gskinner.com/RegExr/中,那么我可以进一步试验.
有两种方法可以实现您的目标......
使用搜索
使用rex
和提取字段eval
来提取字段.
| rex field=_raw "Hub:\[(?<Hub>[^\]]*)\]\sComp:\[(?<Comp>[^\]]*)\]" | eval someNewField=Hub."-".Comp
rex命令允许您对字段运行正则表达式,_raw
是包含整个事件数据的特殊字段名称.正则表达式本身捕获和之间的任何字符[
,]
并将其提取到<>
.
这是最简单的方法,因为您不需要修改任何配置来执行此操作,但缺点是您需要将其添加到搜索字符串中以获取提取的值并按照您希望的方式进行格式化.
使用prop.conf
和使用搜索时间提取transforms.conf
在transforms.conf
,添加一个转换来提取字段......
[hubCompExtract] REGEX = Hub:\[(?<Hub>[^\]]*)\]\sComp:\[(?<Comp>[^\]]*)\]
在props.conf
,执行提取并使用eval连接值...
[yourSourceTypeName] REPORT-fieldExtract = hubCompExtract EVAL-yourNewFieldName = Hub."-".Comp
无需向搜索字符串添加任何内容,但确实需要更改配置文件.
正则表达式的例子
gSkinner示例(没有捕获组名称).