
Estoy intentando capturar texto mediante una expresión regular y reemplazar el texto con una cadena personalizada.
Mi código actual captura con éxito las direcciones IP, pero no sé cómo reemplazar la dirección IP con texto personalizado junto con el resto del mensaje:
$Template privateIP,"%TIMESTAMP% %HOSTNAME% %syslogtag% %msg:R,ERE,0,DFLT:([0-9]{1,3}\.){3}[0-9]{1,3}--end%\n"
Mi primer pensamiento es sacar de alguna manera la expresión regular de la plantilla (es decir, con algo de RainerScript) y crear un nuevo campo/variable modded_msg
que se establezca en una msg
propiedad modificada. Y luego utilícelo %modded_msg%
en $Template.
Lo he intentado varias veces (gracias, ChatGPT), pero no consigo que funcione.
Respuesta1
El siguiente ejemplo puede verificar la propiedad msg de una dirección IP y luego reemplazar todas sus apariciones en el mensaje por alguna cadena, dependiendo de la dirección.
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()
busca la expresión regular en la propiedad. Tenga en cuenta el extra ()
para que podamos extraer el grupo de captura 1, todo el partido. Además, \
se duplica. El último parámetro es 0, devuelto en caso de error. La cadena devuelta se guarda en una variable local $.myip
.
replace()
reemplaza todas las apariciones de la cadena en la propiedad y devuelve el resultado en otra variable local. La plantilla utiliza esta variable local.