如何使用 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 的所有文本。有什么帮助吗?谢谢!
这是因为您不能用否定字符 class 否定符号的 序列 。 [^(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+ 个字符(并将它们捕获到 "capability" 组中)尽可能少(因为 *?
是惰性量词)最多第一个 出现 -
,后跟 2 个数字,然后是 3 个点序列 (\.
),后跟 2 个数字。
请参阅 regex101.com 处的 regex demo。
总有一天我会学习正则表达式。
我有以下文件名
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 的所有文本。有什么帮助吗?谢谢!
这是因为您不能用否定字符 class 否定符号的 序列 。 [^(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+ 个字符(并将它们捕获到 "capability" 组中)尽可能少(因为 *?
是惰性量词)最多第一个 出现 -
,后跟 2 个数字,然后是 3 个点序列 (\.
),后跟 2 个数字。
请参阅 regex101.com 处的 regex demo。