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

Use Sed to replace numbers in URL within Splunk

如何提取 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/(.*\/)[^\/]+(\/.*)/my_var/" 
  | stats values(request_url)

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

您可以使用以下 sed 命令:

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

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

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

参见first regex demo and the second regex demo

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

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

  • (^|/) - 第 1 组 (</code>):一行的开头或 <code>/
  • [[:alpha:]]*[[:digit:]][[:alnum:]]* - 0+ 个字母,一个数字,然后是 0 个或多个数字或字母
  • ($|/) - 第 2 组 (</code>):行尾或 <code>/
  • (?![^/]) - 是一个否定前瞻,它匹配一个没有紧跟任何字符但 /.
  • 的位置