regex (Splunk)如何使用雷克斯命令对双引号括起来的通配符进行模式匹配?

alen0pnh  于 2023-05-01  发布在  其他
关注(0)|答案(1)|浏览(139)

编辑-我已经解决了这个问题,但会尝试你的建议,看看哪一个我更喜欢。我在Splunk中经历了“提取新字段”过程,并手动突出显示了我想要的数据,然后复制自动生成的相应正则表达式并直接使用它

我在使用雷克斯命令匹配Splunk搜索字符串中的模式并将其输出到|表命令。 www.example.com 。我正在尝试匹配双引号内的值。splunk查询中的双引号用斜杠转义。
带通配符的源消息:早餐表 * 中出错,表名""。那只敏捷的棕色狐狸跳过了那只懒狗。“”数据的最大长度当前设置为 * 热狗,但面包长度为 * 英寸。将“”面包的最大长度增加到至少 * 英寸,然后重试。
用双引号括起来的星号是简单的字符串:一个字母、两个字母、多个单词等,独立的星号只是代表数字。
这是可行的:|雷克斯“早餐表出错(?<breakfast_table>\d+)”|将breakfast_table重命名为“BT”这不起作用:|雷克斯“表名“(?<table_name>[^"]*)"”|将table_name重命名为“TN”
雷克斯语句1和4在我在表中查看数字时正确地显示了它们。雷克斯语句2和3返回NULL并且不显示任何内容,即使regex 101(以及chatGPT)似乎与我使用的正则表达式没有问题。

| search Message="Error in breakfast table *, table name \"*\". The quick brown fox jumped over the lazy dog. The maximum length of the \"*\" data is currently set to * hotdogs, but the bun length is * inches. Increase the maximum length of the \"*\" bun to at least * inches and retry.*"

| rex "Error in breakfast table (?<breakfast_table>\d+)" | rename breakfast_table as "BT"

| rex "table name \"(?<table_name>[^\"]*)\"" | rename table_name as "TN"
| rex "maximum length of the \"(?<max_bunlength>[^\"]*)\"" | rename max_bunlength as "MB"

| rex "data is currently set to (?<current_length>\d+)" | rename current_length as "Current Length"

我已经在www. example上确认过 www.example.com 。我在splunk查询上直接尝试了许多不同的正则表达式模式,但都无济于事。
Match 1将捕获整个子字符串,而Group table_name将正确捕获我想要的值。
例如,真实的消息可能插入以下值作为通配符:“email to”或“message id”正确,并且在regex 101上测试此语句中使用的regex时-〉|雷克斯““(?<max_bunlength>[^"]*)"”的最大长度|将max_bunlength重命名为“MB”我将正确地看到以下匹配项
匹配1:“email to”组的最大长度max_bunlength:电邮至
然而,这个max_bunlength变量为显示表中的每条记录显示NULL值

2eafrhcq

2eafrhcq1#

以下rex命令应该可以工作:

| rex field=Message "rror in \w+\s\w+\s(?<error>[^,]+)"
| rex field=Message ", table name\s[^\"]+(?<table_name>[^,]+?)\"\."
| rex field=Message "The maximum[^\"]+\"(?<max_bun_length>[^\"]+)"
| rex field=Message "data is currently set to (?<current_length>\S+)"

相关问题