如何用Logstash掩码16位信用卡号的第6-10位数字?
解决Logstash中信用卡号指定段掩码的问题
嘿,我来帮你搞定这个信用卡号掩码的难题!你之前用的gsub把整个16位卡号都变成#了,那是因为没用到正则的捕获组来精准保留需要显示的部分,其实不用拆分拼接,一个优化后的gsub就能轻松搞定。
针对你给出的示例(把1234567898763456变成123456######3456),可以用这个配置:
filter { mutate { gsub => [ "message", "(\d{6})(\d{6})(\d{4})", "\1######\3" ] } }
配置说明:
- 正则
(\d{6})(\d{6})(\d{4})把16位卡号拆成了三个捕获组:(\d{6}):匹配并保留前6位数字(对应示例里的123456)(\d{6}):匹配需要掩码的中间6位数字(示例里的789876)(\d{4}):匹配并保留最后4位数字(示例里的3456)
- 替换字符串
\1######\3里,\1代表第一个捕获组的内容,\3代表第三个捕获组的内容,中间用6个#替换掉第二个捕获组的内容,完美实现你要的掩码效果。
如果你的实际需求确实是掩码第6到10位(共5位),只需要稍微调整正则和替换串:
filter { mutate { gsub => [ "message", "(\d{5})(\d{5})(\d{6})", "\1#####\3" ] } }
这个配置会保留前5位,掩码中间5位,最后6位原样保留,灵活得很!
内容的提问来源于stack exchange,提问作者Saurav
相关产品推荐
相关产品推荐

