Splunk rex命令提取值失败求助:如何提取JSON中的12345
解决Splunk rex提取JSON特定数值的问题
嘿,我知道你现在在Splunk里用rex命令提取数值时卡壳了——你的查询输出是{"(001) NULL.COUNT(1).NUMBER": "12345"},但当前的rex命令没拿到想要的12345,反而返回了整个JSON内容对吧?
问题出在你写的正则表达式里,那些括号()和点.都是正则中的特殊字符:
- 括号
()在正则里用来定义捕获组,不是字面意义的括号 - 点
.在正则里匹配任意单个字符,不是字面意义的点
所以你需要把这些特殊字符用反斜杠\转义,让正则把它们当成普通字符来匹配。
修正后的rex命令应该是这样的:
| rex field=_transfers "\(001\) NULL\.COUNT\(1\)\.NUMBER\": \"(?<value>.*?)\""
给你拆解下关键修改点:
- 把
(001)改成\(001\),转义括号,让正则识别为字面括号 - 把
NULL.COUNT改成NULL\.COUNT,转义点,匹配字面的点 - 把
(1).NUMBER改成\(1\)\.NUMBER,同样转义括号和点 - 把
.*改成.*?,用非贪婪匹配,避免后续如果有其他引号时匹配范围过大(这个场景下可能不是必须,但能让正则更严谨)
用这个命令之后,value字段就会准确提取出12345啦!你可以直接测试一下,应该就能得到想要的结果了。
内容的提问来源于stack exchange,提问作者36thchamberZA
相关产品推荐
相关产品推荐

