使用Splunk中的rex命令创建正则表达式来返回xml子元素。

问题描述 投票:0回答:1

我正在尝试使用Splunk命令 雷克斯 它使用正则表达式从日志语句中提取数据。 这是xml中值得关注的部分。

<tmsTrip xmlns="removed_for_security" xmlns:ns2="removed_for_security">
   <recordType>PURCHASEDLINEHAUL</recordType>
   <eventType>DISPATCH</eventType>
   <updatedDateGMT>2020-05-21T17:22:55.000Z</updatedDateGMT>
   <origin>
      <ns2:numberCode>923</ns2:numberCode>
      <ns2:numberType>2</ns2:numberType>
   </origin>
   <destination>
      <ns2:numberCode>72</ns2:numberCode>
      <ns2:numberType>2</ns2:numberType>
   </destination>

我需要的是 号码 这只霸王龙返回了第一条,923。

rex field=_raw "\<ns2\:numberCode\>(?P<origin>[^\<]+)" 

我需要一个rex来返回第二个数据,72。

regex xml splunk
1个回答
2
投票

你可以告诉我 rex 来返还他们两个,使用 max_match 选项。

| rex max_match=0 "\<ns2\:numberCode\>(?P<origin>[^\<]+)"
| eval originCode = mvindex(origin, 0), destCode = mvindex(origin, 1)

不幸的是,没有办法知道匹配的顺序,所以如果在XML中目的地在原点之前,这个选项就会失败。

您应该可以使用 spath 来提取整个XML,并参考 "origin.numberCode "和 "destination.numberCode",但我对这个命令没有足够的经验,无法提供很多指导。

© www.soinside.com 2019 - 2024. All rights reserved.