
Ich versuche, Text mithilfe regulärer Ausdrücke zu erfassen und den Text durch eine benutzerdefinierte Zeichenfolge zu ersetzen.
Mein aktueller Code erfasst erfolgreich IP-Adressen, aber ich weiß nicht, wie ich die IP-Adresse zusammen mit dem Rest der Nachricht durch benutzerdefinierten Text ersetzen kann:
$Template privateIP,"%TIMESTAMP% %HOSTNAME% %syslogtag% %msg:R,ERE,0,DFLT:([0-9]{1,3}\.){3}[0-9]{1,3}--end%\n"
Mein erster Gedanke ist, den regulären Ausdruck irgendwie aus der Vorlage zu verschieben (z. B. mit einem RainerScript) und ein neues Feld/eine neue Variable zu erstellen, modded_msg
die auf eine geänderte msg
Eigenschaft eingestellt ist. Und diese dann %modded_msg%
in der $Vorlage zu verwenden.
Ich habe es mehrmals versucht (danke, ChatGPT), aber es funktioniert nicht.
Antwort1
Das folgende Beispiel kann die msg-Eigenschaft auf eine IP-Adresse prüfen und dann alle Vorkommen dieser Adresse in der Nachricht durch eine beliebige Zeichenfolge ersetzen.
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()
sucht in der Eigenschaft nach dem regulären Ausdruck. Beachten Sie das Extra, ()
damit wir die Erfassungsgruppe 1, die gesamte Übereinstimmung, extrahieren können. Außerdem \
wird es verdoppelt. Der letzte Parameter ist 0 und wird bei einem Fehler zurückgegeben. Die zurückgegebene Zeichenfolge wird in einer lokalen Variable gespeichert $.myip
.
replace()
ersetzt alle Vorkommen der Zeichenfolge in der Eigenschaft und gibt das Ergebnis in einer anderen lokalen Variable zurück. Die Vorlage verwendet diese lokale Variable.