Как использовать команду rex с REST API Spunk Curl в качестве клиента - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь извлечь новое поле из необработанных данных с помощью регулярного выражения (команда rex). Мое регулярное выражение работает нормально в расширенной строке веб-поиска и получает результаты. Но не работает с REST api curl в качестве клиента.

Я хочу извлечь поле из набора данных csv train.csv и дать ему имя в виде "numbers"

curl -u admin:password -k https://localhost:8089/services/search/jobs -d search="search source=train.csv|rex field=_raw '^(?:\[^\"\\n\]*\"){2},\\w+,\\d+,\\d+,\\d+,\\d+,\\d+\\.\\d+,(?P<numbers>\[^,\]+)'| top numbers"

выполнив эту команду, я получил sid

<?xml version="1.0" encoding="UTF-8"?>

<response>
 <sid>1548238904.70</sid>

после запроса результата я получаю ошибку

curl -u admin:password -k https://localhost:8089/services/search/jobs/1548238904.70/results

Error in 'rex' command: The regex ''^(?:\[^\n\]*){2}' does not extract anything. It should specify at least one named group. Format: (?&lt;name&gt;...).</msg>

как называется группа, почему она хорошо работает в расширенной панели поиска

я хочу получить результат с "числом" в качестве столбца или нового поля

1 Ответ

0 голосов
/ 30 января 2019

Глядя на сам SPL, кажется, что у вас есть одинарные кавычки вместо двойных кавычек в вашем рекс, что, как известно, вызывает проблемы или не приводит к результатам.

Попробуйте следующий способ избежать двойных кавычеквместо этого:

$ curl -u 'username:password' -k https://dummy.splunk.url/services/search/jobs -d search="| stats count | eval foo=\"bar\" | rex field=foo \"\w(?<named>\w*)\" | table foo named"

Когда вы запрашиваете результаты, вы должны увидеть следующее:

$ curl -u 'username:password' -k https://dummy.splunk.url/services/search/jobs/1548868781.39708/results

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   315  100   315    0     0    420      0 --:--:-- --:--:-- --:--:--   420<?xml version='1.0' encoding='UTF-8'?>
<results preview='0'>
<meta>
<fieldOrder>
<field>foo</field>
<field>named</field>
</fieldOrder>
</meta>
        <result offset='0'>
                <field k='foo'>
                        <value><text>bar</text></value>
                </field>
                <field k='named'>
                        <value><text>ar</text></value>
                </field>
        </result>
</results>

Предполагая, что используется вышеуказанный подход, вы должны получить команду curl как таковую:

curl -u admin:password -k https://localhost:8089/services/search/jobs -d search="search source=train.csv|rex field=_raw \"^(?:\[^\"\\n\]*\"){2},\\w+,\\d+,\\d+,\\d+,\\d+,\\d+\\.\\d+,(?P<numbers>\[^,\]+)\"| top numbers"
...