如何提取splunk字段中最后一个斜杠后的内容?

How to extract contents after the last slash in fields in splunk?

我是 splunk 的新手..所以我有一个包含这种格式的内容(事件)的日志

tool_code: error_code (path1/path2/path3/filename1,行) path1.path2.path3.testname1

我写了 rex 来提取文件名和测试名 雷克斯

|rex field=_raw (?<UNW>\S+)\s+(?<UNWA>\S+)\s+(?<FILE_NAME>\S+)\s+(?<TEST_NAME>\S+)

这创建了这种格式的 table(通过使用这个命令|table FILE_NAME, TEST_NAME

FILE_NAME ------------------------------------ TEST_NAME

path1/path2/path3/filename1,line ---------- path1.path2.path3.testname1

但我希望 FILE_NAME 只保存名称(文件名 1)而不是路径(我们应该提取最后一个斜线之前和逗号之后的内容)并且类似地 TEST_NAME 应该只有testname1 而不是路径。

请帮助我实现这个目标

我会分几个不同的步骤来完成:

| rex field=_raw ":\s+error_code\W+(?<full_path>[^,]+),(?<line>[^)]+)\W+(?<test_path>.+)"

其次是:

| rex field=full_path "(?<filename>\w+)$"

其次是:

| rex field=test_path "(?<testname>[^\.]+)$"

当然,假设 "testname" 中没有点 - 这将有效:)

您创建了一个名为 "FILE_NAME" 的字段。 您现在可以做的是使用拆分命令创建一个新字段:

   `eval OnlyFileName = mvindex(split(FILE_NAME,"/"),-1)`       

eval = 创建新字段

mvindex(split = 分割命令

"/" = 拆分为 /

-1 = 列表中的最后一个对象。

继续分裂直到你得到你想要的。

我推荐使用这种方式,它比一直使用正则表达式要简单得多。花费更少的时间...

试试这个正则表达式。

| rex "[\S\/]+\/(?<FILE_NAME>\S+),\w+\)\s+[\S\.]+\.(?<TEST_NAME>\w+)$"