如何使用Logstash Grok拆分文件名?

时间:2017-04-17 16:30:15

标签: regex logstash-grok grok

有一天我会学习正则表达式。

我有以下文件名

PE-run1000hbgmm3f1-job1000hbgmm3dt-Output-Workflow-1000hbgmm3fb-22.07.17.log

我能够让这个工作......

(?<logtype>[^-]+)-(?<run_id>[^-]+)-(?<job_id>[^-]+)-(?<capability>[^(0-9\.0-9\.0-9)]+)

logtype: PE
run_id: run1000hbgmm3f1
job_id: job1000hbgmm3dt

但是我得到了

capability: Output-Workflow-

......虽然我希望它是

capability: Output-Workflow-1000hbgmm3fb

...也就是说,job_id之后的所有文本都是时间戳HH.mm.ss.有什么帮助吗?谢谢!

1 个答案:

答案 0 :(得分:0)

这是因为你不能否定带有否定字符类的符号的序列[^(0-9\.0-9\.0-9)]匹配除(,数字,.)以外的任何单个字符。

您可以将(?<capability>[^(0-9\.0-9\.0-9)]+)替换为(?<capability>.*?)-\d{2}\.\d{2}\.\d{2}以获得正确的值。

enter image description here

现在,(?<capability>.*?)-\d{2}\.\d{2}\.\d{2}将匹配任何0+字符(并将其捕获到&#34;功能&#34;组)尽可能少(因为*?是一个懒惰的量词)到第一个出现的-,然后是2位数,然后是3个点的序列(\.),后跟2个数字。

请参阅regex101.com上的regex demo