Splunk - 从源正则表达式提取字段
Splunk - regex extract fields from source
我正在尝试使用正则表达式从 Splunk 源中提取作业名称、区域。
以下是我的示例源的格式:
/home/app/abc/logs/20200817/job_DAILY_HR_REPORT_44414_USA_log
通过以下,我可以提取作业名称:
(?<logdir>\/[\W\w]+\/[\W\w]+\/)(?<date>[^\/]+)\/job_(?<jobname>.+)_\d+
这是目前为止的比赛:
Full match 0-53 /home/app/abc/logs/20200817/job_DAILY_HR_REPORT_44414
Group `logdir` 0-19 /home/app/abc/logs/
Group `date` 19-27 20200817
Group `jobname` 32-47 DAILY_HR_REPORT
我还需要美国(地区)的来源。你能帮忙建议一下吗。
区域将始终出现在数字字段 (44414) 之后,其位数可能会有所不同。
例如:123、1234、56789
提前致谢。
您可以使模式更加具体一些,因为 [\W\w]+
和 .+
会导致更多回溯以适应模式的其余部分。
然后对于该区域,您可以在末尾添加一个命名组 (?<region>[^\W_]+)
匹配除下划线以外的任何单词字符一次或多次。
部分
(?<logdir>\/(?:[^\/]+\/)*)(?<date>(?:19|20)\d{2}(?:0?[1-9]|1[012])(?:0[1-9]|[12]\d|3[01]))\/job_(?<jobname>\w+)_\d+_(?<region>[^\W_]+)_log
(?<logdir>
组 logdir
\/(?:[^\/]+\/)*
匹配 /
并可选择重复除 /
之外的任何字符,然后再次匹配 /
)
关闭群组
(?<date>
组日期
(?:19|20)\d{2}
匹配以 19 或 20 开头的年份
(?:0?[1-9]|1[012])
匹配一个月
(?:0[1-9]|[12]\d|3[01])
匹配一天
)
关闭群组
\/job_
匹配 /job_
(?<jobname>\w+)
组 jobname,匹配 1+ 个单词字符
_\d+_
匹配下划线之间的 1+ 个数字
(?<region>[^\W_]+)
Group region 匹配出现 1 次以上的单词 char 除了 _
_log
字面匹配
我正在尝试使用正则表达式从 Splunk 源中提取作业名称、区域。
以下是我的示例源的格式:
/home/app/abc/logs/20200817/job_DAILY_HR_REPORT_44414_USA_log
通过以下,我可以提取作业名称:
(?<logdir>\/[\W\w]+\/[\W\w]+\/)(?<date>[^\/]+)\/job_(?<jobname>.+)_\d+
这是目前为止的比赛:
Full match 0-53 /home/app/abc/logs/20200817/job_DAILY_HR_REPORT_44414
Group `logdir` 0-19 /home/app/abc/logs/
Group `date` 19-27 20200817
Group `jobname` 32-47 DAILY_HR_REPORT
我还需要美国(地区)的来源。你能帮忙建议一下吗。 区域将始终出现在数字字段 (44414) 之后,其位数可能会有所不同。 例如:123、1234、56789
提前致谢。
您可以使模式更加具体一些,因为 [\W\w]+
和 .+
会导致更多回溯以适应模式的其余部分。
然后对于该区域,您可以在末尾添加一个命名组 (?<region>[^\W_]+)
匹配除下划线以外的任何单词字符一次或多次。
部分
(?<logdir>\/(?:[^\/]+\/)*)(?<date>(?:19|20)\d{2}(?:0?[1-9]|1[012])(?:0[1-9]|[12]\d|3[01]))\/job_(?<jobname>\w+)_\d+_(?<region>[^\W_]+)_log
(?<logdir>
组 logdir\/(?:[^\/]+\/)*
匹配/
并可选择重复除/
之外的任何字符,然后再次匹配/
)
关闭群组(?<date>
组日期(?:19|20)\d{2}
匹配以 19 或 20 开头的年份(?:0?[1-9]|1[012])
匹配一个月(?:0[1-9]|[12]\d|3[01])
匹配一天
)
关闭群组\/job_
匹配/job_
(?<jobname>\w+)
组 jobname,匹配 1+ 个单词字符_\d+_
匹配下划线之间的 1+ 个数字(?<region>[^\W_]+)
Group region 匹配出现 1 次以上的单词 char 除了_
_log
字面匹配