繁体   English   中英

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

[英]How do I split a filename using Logstash 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. 有什么帮助吗? 谢谢!

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

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

在此输入图像描述

现在, (?<capability>.*?)-\\d{2}\\.\\d{2}\\.\\d{2}将匹配任何0+字符(并将它们捕获到“功能”组)中尽可能(因为*?是一个惰性量词),直到第一次出现- ,然后是2位数,然后是3个点的序列( \\. ),后跟2位数。

请参阅regex101.com上的正则表达式演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM