在 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>/
(?![^/])
- 是一个否定前瞻,它匹配一个没有紧跟任何字符但 /
. 的位置
如何提取 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>/
(?![^/])
- 是一个否定前瞻,它匹配一个没有紧跟任何字符但/
. 的位置