splunk学习笔记——正则表达式

splunk正则表达式

  • 正则表达式匹配文本字符模式,使用正则表达式的搜索命令包括rex、regex,以及评估函数(例:match、replace)。
  • splunk正则表达式均为PRCE(Perl兼容正则表达式),且使用PRCE C库。

1 语法和表达

关于splunk正则表达式的语法介绍可以参考官方文档《Knowledge Manager Manual》

字符类型

组、量词、替换

例子:

  • 事件文本:131.253.24.135 fail admin_user
  • 目标:提取出ip、result、user
  • 表达式:
    a. (?<ip>\d+.\d+.\d+.\d+) (?<result>\w+) (<user>.*)
    b. (?<ip>\S+) (?<result>\S+) (?<user>\S+)

2 搜索命令

关于搜索命令的详细介绍可以参考官方文档《Search Reference》

2.1 rex

描述
使用该命令可以通过以正则表达式命名的群组提取字段,还可以通过sed表达式替换或取代字段中的字符。
语法
rex [field=<field>] (<regex-expression> [max_match=<int>] [offset_field=<string>]) | (mode=sed <sed-expression>)


例1

  • 原始事件:From: Susan To: Bob
  • 目标:from=Susan, to=Bob
  • 命令:|rex field=_raw “From: (?<from>.*) To: (?<to>.*)”

例2

  • 原始事件:从search_id字段中提取user、app,search_id字段的值是search_id=bob;search
  • 目标:user=bob, app=search
  • 命令:|rex field=search_id “(?<user>\w+);(?<app>\w+)”

例3

  • 目标:将正则表达式匹配的数字替换成匿名字符串
  • 命令:|rex field=cnumber mod=sed “s/(\d{4}-){3}/xxxx-xxxx-xxxx-/g”

2.2 regex

描述
该命令可以删除与指定正则表达式不匹配的结果。
语法
regex (<field>=<regex-expression>|<field>!=<regex-expression>|<regex-expression>)

  • 目标:仅保留_raw字段包含A类IP地址(10.0.0.0/8)的搜索结果
  • 命令:|regex _raw=”(?=!\d)10.\d{1,3}.\d{1,3}.\d{1,3}(?!\d)”

2.3 erex

描述
该命令可以自动提取与指定示例值相似的字段值。
语法
erex [<field>] examples=<string> [<counterexamples>=<string>] [fromfield=<field>]

  • 目标:提取7/01和07/02这样的值,但不是99/2这样的模式,并把提取值放在monthday属性中
  • 命令:|erex monthday examples=”7/01, 07/02” counterexamples=”99/2”

3 实际问题

以下是我碰到的一个实际问题
数据源:邮件日志
问题:由于是域账户,用户名前带有域名,如poc\admin;
           用户名还可能是完整的邮箱名称,如:admin@poc.com
目标:提取出用户名,不包含前缀以及后缀
命令:注意需要四个斜杠来匹配一个斜杠
这里写图片描述
结果对比
不加正则:

加正则:

附:
正则中为什么需要4个/来匹配1个/

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值