
정규식을 통해 텍스트를 캡처하고 해당 텍스트를 사용자 정의 문자열로 바꾸려고 합니다.
현재 코드는 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
수정된 속성으로 설정된 새 필드/변수를 만드는 것입니다 msg
. 그런 다음 %modded_msg%
$Template에서 사용합니다.
여러 번 시도했지만(ChatGPT에게 감사드립니다) 제대로 작동하지 않습니다.
답변1
다음 예에서는 IP 주소의 msg 속성을 확인한 다음 주소에 따라 메시지에서 해당 속성의 모든 항목을 일부 문자열로 바꿀 수 있습니다.
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()
속성에서 해당 문자열을 모두 바꾸고 결과를 다른 지역 변수에 반환합니다. 템플릿은 이 지역 변수를 사용합니다.