我想使用 Streamsets 破壞日志文件。日志就像,Deny tcp src dmz:77.77.77.7/61112 dst dmz:55.55.56.57/139 by access-group "outside_access_in" [0x8b3ecfdc, 0x0]日志中可能還有 2 個以上的 IP,我正在嘗試從我的日志中捕獲唯一的第一個和第二個 IP 地址。據記載,Streamsets 使用 Java REGEX 模式。到目前為止,我在 Streamsets 的 Expression Evaluator 處理器中所做的是,${str:regExCapture(record:value('/Message'),'(\\d+[.]\\d+[.]\\d+[.]\\d+/?\\d*)', 1)}知道如何捕獲第二個 IP 嗎?
1 回答

慕工程0101907
TA貢獻1887條經驗 獲得超5個贊
您可以使用
${str:regExCapture(record:value('/Message'),'^(?:.*?(\\d+(?:[.]\\d+){3}(?:/\\d+)?)){2}', 1)}
請參閱正則表達式演示。
細節
^
- 字符串的開始(?:.*?(\\d+(?:[.]\\d+){3}(?:/\\d+)?)){2}
- 連續兩次出現\\d+
- 1+ 位數字(?:[.]\\d+){3}
- 出現 3 次.
和 1+ 位數字(?:/\\d+)?
-/
和 1+ 數字的可選序列。.*?
- 除換行符以外的任何 0+ 個字符,盡可能少(\\d+(?:[.]\\d+){3}(?:/\\d+)?)
- 捕獲組 1(它的值將被返回,str:regExCapture
因為最后一個參數被設置為1
):
由于在一次匹配操作中捕獲多次出現時,組中的內容會被重寫,因此組 1 將僅包含第二個 IP 值。
請注意,更好(更安全、更精確)的 IP 模式是(?:25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)(?:\\.(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)){3}
,請參閱使用正則表達式從字符串中提取 ip 地址。所以,你也可以把命令寫成
${str:regExCapture(record:value('/Message'),'^(?:.*?\\b((?:25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)){3}(?:/\\d+)?)){2}', 1)}
請參閱另一個正則表達式演示。
添加回答
舉報
0/150
提交
取消