首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Rsyslog中,如何用自定义文本替换regex匹配?

在Rsyslog中,如何用自定义文本替换regex匹配?
EN

Server Fault用户
提问于 2023-03-04 13:55:06
回答 1查看 360关注 0票数 0

我试图通过正则表达式捕获文本,并将文本替换为自定义字符串。

我当前的代码成功地捕获了IP地址,但我不知道如何用自定义文本以及消息的其余部分替换IP地址:

代码语言:javascript
复制
$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),但没能让它开始工作。

EN

回答 1

Server Fault用户

回答已采纳

发布于 2023-03-04 17:32:23

下面的示例可以检查IP地址的msg属性,然后根据地址将消息中出现的所有事件替换为字符串。

代码语言:javascript
复制
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使用这个局部变量。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1125294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档