Regex 使用Sed替换Splunk中URL中的数字
如何在URL中提取字母数字值?下面的查询没有替换正确的值 输入数据示例:Regex 使用Sed替换Splunk中URL中的数字,regex,sed,splunk,splunk-query,Regex,Sed,Splunk,Splunk Query,如何在URL中提取字母数字值?下面的查询没有替换正确的值 输入数据示例: /example/endpoint/here/34456dwf45 /endpoint/fddk449372 /434236/example/endpoint 预期产出: /example/endpoint/here/my_var /endpoint/my_var /my_var/example/endpoint 当前查询: * | rex mode=sed field=request_url "s/(.*\\/)[^
/example/endpoint/here/34456dwf45
/endpoint/fddk449372
/434236/example/endpoint
预期产出:
/example/endpoint/here/my_var
/endpoint/my_var
/my_var/example/endpoint
当前查询:
* | rex mode=sed field=request_url "s/(.*\\/)[^\/]+(\/.*)/\1my_var\2/"
| stats values(request_url)
如何使用sed将两个/字符内的任何字母数字值替换为URL内的字符串?您可以使用以下
sed
命令:
"s,(^|/)[[:alpha:]]*[[:digit:]][[:alnum:]]*($|/),\1my_var\2,"
或者,要替换重叠匹配和所有匹配项,请使用(?![^/])
而不是($|/)
,并在末尾添加g
标志:
"s,(^|/)[[:alpha:]]*[[:digit:]][[:alnum:]]*(?![^/]),\1my_var,g"
请参阅和
s
这里的意思是我们需要替换字符串。分隔符是,
(逗号),因为这样我们不必转义正斜杠
(^ |/)[[:alpha:][]*[:digit:][[:alnum:][]*($|/)
模式匹配
-第1组((^ |/)
):开始连线或\1
/
-0+个字母,一个数字,然后是0个或更多的数字或字母[[:alpha:][]*[:digit:][[:alnum:][]*
-第2组(($|/)
):行尾或\2
/
-是一个负前瞻,它匹配一个位置,该位置后面不紧跟任何字符,而是(?![^/])
/
/abc/v1/def/589639/abc
相当于我的搜索结果中的/abc/my_var/def/589639/abc
。Splunk在检索与常规正则表达式不同的结果时会做些什么吗?@bally尝试两件事:1)替换($)/)
与(?![^/])
并从替换模式中删除\2
,2)在最后一个,
之后添加g
<代码>“s,(^ |/)[[:alpha:]*[:digit:][:alnum:]*(?![^/]),\1my_var,g”