
Estou tentando capturar texto por meio de expressão regular e substituir o texto por uma string personalizada.
Meu código atual captura endereços IP com êxito, mas não sei como substituir o endereço IP por texto personalizado junto com o restante da mensagem:
$Template privateIP,"%TIMESTAMP% %HOSTNAME% %syslogtag% %msg:R,ERE,0,DFLT:([0-9]{1,3}\.){3}[0-9]{1,3}--end%\n"
Meu primeiro pensamento é, de alguma forma, mover o regex para fora do modelo (ou seja, com algum RainerScript) e criar um novo campo/variável modded_msg
definido como uma msg
propriedade modificada. E então use %modded_msg%
no $Template.
Tentei várias vezes (obrigado, ChatGPT), mas não consigo fazer funcionar.
Responder1
O exemplo a seguir pode verificar a propriedade msg para um endereço IP e, em seguida, substituir todas as ocorrências dele na mensagem por alguma string, dependendo do endereço.
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()
procura o regexp na propriedade. Observe o extra ()
para que possamos extrair o grupo de captura 1, toda a partida. Além disso, o \
é duplicado. O último parâmetro é 0, retornado em caso de falha. A string retornada é salva em uma variável local $.myip
.
replace()
substitui todas as ocorrências da string na propriedade e retorna o resultado em outra variável local. O modelo usa esta variável local.