使用Sed替换Splunk中URL中的数字

时间:2019-04-29 15:01:53

标签: 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/(.*\\/)[^\/]+(\/.*)/\1my_var\2/" 
  | stats values(request_url)

如何使用sed将两个/字符内的任何字母数字值替换为URL内的字符串?

1 个答案:

答案 0 :(得分:1)

您可以使用以下sed命令:

"s,(^|/)[[:alpha:]]*[[:digit:]][[:alnum:]]*($|/),\1my_var\2,"

或者,要替换重叠的匹配项和所有匹配项,请使用(?![^/])而不是($|/),并在末尾添加g标志:

"s,(^|/)[[:alpha:]]*[[:digit:]][[:alnum:]]*(?![^/]),\1my_var,g"

请参见first regex demosecond regex demo

s在这里意味着我们需要替换字符串。分隔符为,(逗号),因为这样我们就不必转义正斜杠。

(^|/)[[:alpha:]]*[[:digit:]][[:alnum:]]*($|/)模式匹配

  • (^|/)-第1组(\1):直线开始或/
  • [[:alpha:]]*[[:digit:]][[:alnum:]]*-0+个字母,一个数字,然后是0个或多个数字或字母
  • ($|/)-第2组(\2):行尾或/
  • (?![^/])-是一个否定的超前查询,匹配的位置不是紧跟着/的任何字符,而是紧随其后的位置。