如何在Logstash中使用gsub移除特定字符后的指定模式
在Logstash中使用gsub移除特定位置的HMAC字符串
问题场景
原始日志内容:
13-12-2022 `ACTIVITY-LOG` 20108 `The is my sample HMAC message`HMAC HMAC HMAC
期望处理后结果:
13-12-2022 `ACTIVITY-LOG` 20108 `The is my sample HMAC message`
尝试过以下代码,但会替换所有HMAC实例,不符合需求:
mutate { gsub => [ "message", "HMAC", "" ] }
需要实现的是只移除最后一个反引号`之后出现的HMAC(包括其附带的空格)。
解决方案
使用带有正则断言的gsub配置,精准匹配目标位置的内容进行替换:
mutate { gsub => [ "message", '(?<=`)(HMAC\s*)+$', '' ] }
正则说明
(?<=):正向零宽断言,确保匹配的内容前面紧邻一个反引号,不会影响引号内的HMAC(HMAC\s*)+$:匹配行尾处所有连续的HMAC字符串(每个HMAC后可能跟随空格),+表示匹配一次或多次重复的该模式- 替换为空字符串后,就会保留引号内的HMAC,仅移除最后一个引号之后的所有HMAC内容
另外也可以用捕获组的方式实现,效果一致:
mutate { gsub => [ "message", '^(.*`[^`]+`)(HMAC\s*)+$', '\1' ] }
^(.*[^`]+`)`:捕获从行首到最后一个反引号及其内部内容的所有部分(HMAC\s*)+$:匹配最后一个引号之后的所有HMAC内容- 替换为捕获组
\1,即保留前面的内容,丢弃后面的HMAC部分
内容的提问来源于stack exchange,提问作者abhisheknayak777
相关产品推荐
相关产品推荐

