簡體   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