我试图通过正则表达式捕获文本,并将文本替换为自定义字符串。
我当前的代码成功地捕获了IP地址,但我不知道如何用自定义文本以及消息的其余部分替换IP地址:
$Template privateIP,"%TIMESTAMP% %HOSTNAME% %syslogtag% %msg:R,ERE,0,DFLT:([0-9]{1,3}\.){3}[0-9]{1,3}--end%\n"我的第一个想法是以某种方式将正则表达式从模板中移出(例如,使用一些RainerScript),并创建一个新的字段/变量modded_msg,该字段/变量D1设置为修改后的msg属性。然后在%modded_msg%中使用$Template。
我已经试过好几次了(谢谢,ChatGPT),但没能让它开始工作。
发布于 2023-03-04 17:32:23
下面的示例可以检查IP地址的msg属性,然后根据地址将消息中出现的所有事件替换为字符串。
set $.myip = re_extract($msg, "(([0-9]{1,3}\\.){3}[0-9]{1,3})", 0, 1, 0);
if ($.myip == 0) then set $.mymsg = $msg;
else{
if ($.myip=="192.1.2.3") then
set $.mymsg = replace($msg, $.myip, "SPECIALIP");
else
set $.mymsg = replace($msg, $.myip, "boringip");
}
template(name="mytemplate" type="string" string="%TIMESTAMP% %$.mymsg%\n")
action(type="omfile" file="output" template="mytemplate")re_extract()在属性中查找regexp。注意额外的(),这样我们就可以提取捕获组1,整个匹配。同时,\也翻了一番。最后一个参数是0,失败时返回。返回的字符串保存在局部变量$.myip中。
replace()替换属性中出现的所有字符串,并在另一个局部变量中返回结果。templace使用这个局部变量。
https://serverfault.com/questions/1125294
复制相似问题