繁体   English   中英

使用正则表达式解析日志

[英]Parsing log using regex

我需要使用正则表达式解析日志(来自 auditd)。 我需要从命令中检索 arguments。

日志示例(使用 du 命令):

type=EXECVE msg=audit(1641487955.407:18420): argc=2 a0="du" a1="-hd1"
type=EXECVE msg=audit(1641487971.246:18421): argc=3 a0="du" a1="-h" a2="-d1"
type=EXECVE msg=audit(1641488053.261:18422): argc=4 a0="du" a1="-h" a2="-d1" a3="-x"

使用的正则表达式:

^.*(?:a1=)(?<a1>[^ ]*) (?:a2=)(?<a2>[^ ]*)

它适用于示例 2,但它适用于示例 1,并且它对于示例 3 不完整。

任何找到正确正则表达式的线索都将受到高度赞赏。

可以加? 对于文本中可能不会发生的组,我用 python 编写了示例,希望对您有用。 正则表达式是

audit(?P<audit>\([^\s]+\)):\s+argc=(?P<argc>[^\s]+)\s+a0=(?P<a0>[^\s]+)\s+a1=(?P<a1>[^\s]+)(\s+a2=(?P<a2>[^\s]+))?(\s+a3=(?P<a3>[^\s]+))?

每个组都以?P<name>命名。 取决于平台,将此帮助用于名称组。

编码:

import re

r = re.compile("audit(?P<audit>\([^\s]+\)):\s+argc=(?P<argc>[^\s]+)\s+a0=(?P<a0>[^\s]+)\s+a1=(?P<a1>[^\s]+)(\s+a2=(?P<a2>[^\s]+))?(\s+a3=(?P<a3>[^\s]+))?")
text = '''type=EXECVE msg=audit(1641487955.407:18420): argc=2 a0="du" a1="-hd1"
type=EXECVE msg=audit(1641487971.246:18421): argc=3 a0="du" a1="-h" a2="-d1"
type=EXECVE msg=audit(1641488053.261:18422): argc=4 a0="du" a1="-h" a2="-d1" a3="-x"'''

for it in r.finditer(text):
    print(it.groupdict())

#output
# {'audit': '(1641487955.407:18420)', 'argc': '2', 'a0': '"du"', 'a1': '"-hd1"', 'a2': None, 'a3': None}
# {'audit': '(1641487971.246:18421)', 'argc': '3', 'a0': '"du"', 'a1': '"-h"', 'a2': '"-d1"', 'a3': None}
# {'audit': '(1641488053.261:18422)', 'argc': '4', 'a0': '"du"', 'a1': '"-h"', 'a2': '"-d1"', 'a3': '"-x"'}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM