[英]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.