Множество рекс-выражений
Я использую выражения rex ниже для поиска следующих полей в моих необработанных данных:
Адресная строка 1 Адресная строка 2 Адресная строка 3 Адресная строка 4 и почтовый индекс
| rex "Address Line 1=(?<address1>[^,]*)" | rex "Address Line 2=(?<address2>[^,]*)" | rex "Address Line 3=(?<address3>[^,]*)" | rex "Address Line 4=(?<address4>[^,]*)" | rex "Postcode=(?<postcode>[^,]*)" |
Как видно из выражения, каждому из этих полей затем назначается переменная, поэтому для адресной строки 1 переменная - это адрес1, адресная строка 2 - это "адрес2" и так далее.
Как вы также, несомненно, увидите, приведенное выше выражение содержит несколько выражений rex, может кто-нибудь, возможно, скажет мне, пожалуйста, есть ли способ объединить их в одно выражение rex.
2 ответа
Первый пример на странице https://docs.splunk.com/Documentation/Splunk/6.6.1/SearchReference/Rex показывает, как извлечь несколько полей с помощью одного rex
команда. Если твой _raw
многострочный, используйте \n
или же \r
по мере необходимости. http://docs.splunk.com/Documentation/Splunk/6.6.1/Knowledge/AboutSplunkregularexpressions
вы просто помещаете несколько групповых совпадений в свое регулярное выражение. Вот пример:
| rex field=_raw "\"SubjectId\":\"(?P<User>[^\"]*)\".*\"GrantType\":\"(?P<GrantType>\w*)\".*\"Category\":\"(?P<Category>\w+)\".*\"Name\":\"(?P<desc>[^\"]*)\".*\"TimeStamp\":\"(?P<TimeStamp>[^\"]*)\".*\"RemoteIpAddress\":\"(?P<IP>(?:[0-9]{1,3}\.){3}[0-9]{1,3})\"" |
конечно, для этого необходимо заранее знать порядок полей, что не требуется при объединении нескольких выражений 'rex' в вашем поиске.
Мне кажется, что для сложного примера проще сначала добавить несколько строк в regex101.app , например, для проверки выражения (я использую локально установленное приложение, но веб-сайт работает)