Regex 使用Sed替换Splunk中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/(.*\\/)[^

如何在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/(.*\\/)[^\/]+(\/.*)/\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
    ):开始连线或
    /
  • [[:alpha:][]*[:digit:][[:alnum:][]*
    -0+个字母,一个数字,然后是0个或更多的数字或字母
  • ($|/)
    -第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”