任何人都可以告诉我在logstash中带有正则表达式的if
语句是什么样的吗?
我的尝试:
if [fieldname] =~ /^[0-9]*$/
if [fieldname] =~ "^[0-9]*$"
两者都不起作用。
我打算做的是检查" fieldname"包含一个整数
答案 0 :(得分:13)
将其他答案合并为一个有凝聚力的答案。
您的第一种格式看起来是正确的,但您的正则表达式并不是您想要的。
/^[0-9]*$/
匹配:
^
:行的开头
[0-9]*
:任意数字0次或以上
$
:行尾
因此,你的正则表达式捕获专门由数字组成的行。要在仅包含一个或多个数字的字段上进行匹配,请尝试使用等效的/[0-9]+/
或/\d+/
,并且每个数字都匹配1位或更多位数,而不管该行的其余部分。
总的来说你应该:
if [fieldname] =~ /\d+/ {
# do stuff
}
答案 1 :(得分:3)
^
在字符串
$
在字符串
您的正则表达式与数字字符串匹配,并且检查包含整数,需要删除^
和$
。
答案 2 :(得分:3)
最简单的方法是检查\d
if [fieldname] =~ /\d+/ {
...
}
答案 3 :(得分:1)
您的第一种格式有效(在撰写本文时适用于我)。
在下面的摘录中检查当前的logstash版本,并在匹配时注意输出中存在的Header1 Header2 01/09/2018 01/10/2018
ABCDEF PP 529666 110735
GHIJKL CC 720988 256444
字段。正如预期的那样,空字段也可以匹配,但是否则它是完美的。
我建议您使用简短的stdin-stdout配置来测试内容。 Logstash和Elastic的东西很棒,但是大多数情况下,经常在文档中没有适当讨论极端情况。由于我们都被吸引,他们开发代码的速度比文档更快。
uuid
答案 4 :(得分:0)
你需要这个正则表达式(和括号,我认为):
if ([fieldname] =~ /^[0-9]+$/)