如何在Splunk字段值中将e2_quote_policy_ask_zipcode*替换为AskZipcode?
问题描述
我的Splunk查询返回的字段包含以下值:
C360Lookupsingle/MainMenu2/e2_quote_policy_ask_zipcode90094/e2_quote_existing_policy_utterancesales_default/e2_quote_existing_policy~_xfer
C360Lookupsingle/MainMenu2/e2_quote_policy_ask_zipcode94579/e2_quote_existing_policy_utteranceinsurance/e2_quote_existing_policy~_xfer
C360Lookupnone/MainMenu2/e2_quote_policy_ask_zipcode91748/e2_quote_existing_policy_utteranceinsurance.utterance.contains(quote)/e2_quote_existing_policy~_xfer
需要把所有以e2_quote_policy_ask_zipcode开头的路径段(包括后续的~及数字内容)替换为AskZipcode,期望输出:
C360Lookupsingle/MainMenu2/AskZipcode/e2_quote_existing_policy_utterancesales_default/e2_quote_existing_policy_xfer
C360Lookupsingle/MainMenu2/AskZipcode/e2_quote_existing_policy_utteranceinsurance/e2_quote_existing_policy_xfer
C360Lookupnone/MainMenu2/AskZipcode/e2_quote_existing_policy_utteranceinsurance.utterance.contains(quote)/e2_quote_existing_policy_xfer
解决方案
使用Splunk的rex命令结合正则表达式完成替换,具体命令如下:
假设目标字段名为path_field,在查询中添加以下语句:
| rex mode=sed field=path_field "s/e2_quote_policy_ask_zipcode~[^/]+/AskZipcode/g"
正则规则说明
s/:标记替换操作的开始e2_quote_policy_ask_zipcode~[^/]+:精准匹配以e2_quote_policy_ask_zipcode~开头,直到下一个/为止的所有内容([^/]+表示匹配任意非/的字符,且至少出现一次)/AskZipcode/:指定替换后的目标文本g:全局替换标识,确保字段内所有符合规则的片段都会被替换
如果需要保留原字段,生成新的处理后字段,可以修改为:
| rex mode=sed field=path_field "s/e2_quote_policy_ask_zipcode~[^/]+/AskZipcode/g" AS processed_path
内容的提问来源于stack exchange,提问作者arunpatil1988

