Используйте Sed для замены номеров в URL в Splunk - PullRequest
1 голос
/ 29 апреля 2019

Как извлечь буквенно-цифровые значения из 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 Ответ

1 голос
/ 29 апреля 2019

Вы можете использовать следующую команду sed:

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

Или, чтобы заменить перекрывающиеся совпадения и все вхождения, используйте (?![^/]) вместо ($|/) и добавьте флаг g в конце:

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

См. Демо first regex и демо second regex .

s здесь означает, что нам нужно заменить строки.Разделителями являются , (запятые), так как таким образом нам не нужно экранировать косую черту.

Шаблон (^|/)[[:alpha:]]*[[:digit:]][[:alnum:]]*($|/) соответствует

  • (^|/) - группа 1 (\1): начало строки или /
  • [[:alpha:]]*[[:digit:]][[:alnum:]]* - 0+ букв, цифр и затем 0 или более цифр или букв
  • ($|/) - группа 2 (\2): конец строки или /
  • (?![^/]) - это отрицательный прогноз, соответствующий местоположению, за которым сразу же не следует ни один символ, но /.
...