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

splunk正则表达式

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

1 语法和表达

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

splunk学习笔记——正则表达式_第1张图片

字符类型
splunk学习笔记——正则表达式_第2张图片
组、量词、替换
splunk学习笔记——正则表达式_第3张图片

例子:

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

2 搜索命令

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

2.1 rex

描述
使用该命令可以通过以正则表达式命名的群组提取字段,还可以通过sed表达式替换或取代字段中的字符。
语法
rex [field=] ( [max_match=] [offset_field=]) | (mode=sed )
splunk学习笔记——正则表达式_第4张图片

例1

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

例2

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

例3

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

2.2 regex

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

  • 目标:仅保留_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 [] examples= [=] [fromfield=]

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

3 实际问题

以下是我碰到的一个实际问题
数据源:邮件日志
问题:由于是域账户,用户名前带有域名,如poc\admin;
           用户名还可能是完整的邮箱名称,如:[email protected]
目标:提取出用户名,不包含前缀以及后缀
命令:注意需要四个斜杠来匹配一个斜杠
这里写图片描述
结果对比
不加正则:
splunk学习笔记——正则表达式_第5张图片
加正则:
splunk学习笔记——正则表达式_第6张图片
附:
正则中为什么需要4个/来匹配1个/
splunk学习笔记——正则表达式_第7张图片

你可能感兴趣的:(安全,splunk)