我正试图通过正则表达式(rex命令)从原始数据中提取新字段。我的正则表达式在splunk Web搜索栏中运行良好并得到结果。但不能将REST api curl作为客户端使用。
我想从csv数据集train.csv中提取一个字段,并将其名称命名为“数字”
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: (?<name>...).</msg>
名为group的组,为什么它在splunk搜索栏中能正常工作
我想要将“数字”作为列或新字段的结果
答案 0 :(得分:0)
查看您的SPL本身,看来您的rex中有单引号而不是双引号,众所周知这会导致问题或没有结果。
请尝试使用以下转义双引号的方法:
$ 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"