
正規表現を使用してテキストをキャプチャし、そのテキストをカスタム文字列に置き換えようとしています。
現在のコードでは 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
変更されたプロパティに設定された新しいフィールド/変数を作成することです。そして、それを$Template でmsg
使用します。%modded_msg%
何度も試しましたが(ChatGPTに感謝します)、うまくいきません。
答え1
次の例では、IP アドレスの msg プロパティをチェックし、そのアドレスに応じて、メッセージ内のその IP アドレスのすべての出現箇所を何らかの文字列に置き換えます。
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()
プロパティ内の正規表現を検索します。()
キャプチャ グループ 1、つまり一致全体を抽出できるように、余分な に注意してください。また、 は\
2 倍になります。最後のパラメーターは 0 で、失敗した場合に返されます。返された文字列はローカル変数 に保存されます$.myip
。
replace()
プロパティ内の文字列のすべての出現を置き換え、結果を別のローカル変数に返します。テンプレートはこのローカル変数を使用します。