需要使用RegEx提取和重新格式化

 好人杨华_840 发布于 2023-02-12 18:58

我正在使用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/中,那么我可以进一步试验.

1 个回答
  • 有两种方法可以实现您的目标......

    使用搜索

    使用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示例(没有捕获组名称).

    2023-02-12 19:01 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有