gpt4 book ai didi

Windows-1252 编码字符串 + (H)H :MM:SS. sss 的正则表达式

转载 作者:行者123 更新时间:2023-12-03 01:41:32 24 4
gpt4 key购买 nike

我正在使用 Filebeat/Logstash 解析一些日志文件,其中有几行是这样的:

584       +%put Duração Relatório &duracao.;
Duração Relatório 0:00:00.33

使用 filebeat,我已经将其设置为使用编码 windows-1252和以下正则表达式(在 https://regex101.com 上测试):
include_lines: ["Duração Relatório.*"]
然而,这忽略了这条线。查看日志,我可以看到 filebeat 忽略了该行:
filebeat_1       | 2017/11/03 10:35:02.337238 log.go:199: DBG  Drop line as it does not match any of the include patterns Duração Relatório 0:00:00.33`

此外,我的 logstash 转换似乎无法识别毫秒部分:
grok {
match => {
'message' => 'Duração Relatório%{SPACE}%{GREEDYDATA:Duration}'
}
}
grok {
match => {
'source' => '%{GREEDYDATA}/%{GREEDYDATA:docId}'
}
}
ruby {
code => "
h, m, s = event.get('Duration').split(':').map{|str| str.to_i}
event.set('Duration', h*3600 + m*60 + s*1000)
"
}

所以,我的问题是,我做错了什么,我可以有一个正则表达式来只获取第二行(HH:MM:SS.sss中的字符串+持续时间)吗?
如何让 logstash 过滤器也考虑到 sss部分?

最好的祝福

编辑:

所以,没有得到正确消息的问题是因为 include_lines: ["Duração Relatório.*"]应该写成 include_lines: ['Duração Relatório.*']
但是,当我不想时,我仍然在 catch 第一行。我怎样才能确保我只得到字符串+时间?

我试过在正则表达式上使用管道但无济于事......

最佳答案

要查找搜索短语后跟空格,然后使用类似时间的子字符串的行

Duração Relatório\s+\d[\d:.]+

regex demo .更具体的正则表达式是 Duração Relatório\s+\d{1,2}:\d{2}:\d{2}\.\d+ .
\s+匹配 1+ 个空格和 \d[\d:.]+匹配一个数字,然后匹配 1+ 个数字、冒号或/和点。

要将时间字符串拆分为组件,还要考虑小数分隔符,它是一个点并使用 .split(/[.:]/)而不是 .split(':') (甚至 .split(/\W+/) 其中 \W+ 匹配除字母、数字和下划线之外的任何 1 个或多个字符)。

关于Windows-1252 编码字符串 + (H)H :MM:SS. sss 的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47093883/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com