在 Grok 模式中排除 Unicode 符号

Exclude Unicode symbol in Grok pattern

是否有任何选项可以直接在 grok 模式中从行中排除 Unicode 符号。 我正在尝试逐行读取 json 数据,认为 AWS Glue“getSourceWithFormat”方法使用 grok 模式进行字符串解析。

文件中的行:

{"age":12,"test":0,"f":"\u0085 NE 911,Aven","f2":"090","f3":"U019"}

如果我使用:%{GREEDYDATA:message} 它只会 return 行的一部分:{"age":12,"test":0,"f":" 因为 \u0085(新行)符号。

如何在我的模式中直接跳过这个符号以便在输出中获得完整消息?

谢谢。

这里的问题是 %{GREEDYDATA:message} 实际上是 .* 模式。 NFA 正则表达式引擎中的 dot does not match line break characters by default

如果你将它与 Grok 一起使用,你需要告诉 Onigmo 正则表达式引擎这个 %{GREEDYDATA:message} 也应该匹配换行符,这是可以做到的通过在模式的开头添加 (?m)

此外,作为解决方法,您可以将 %{GREEDYDATA:message} 替换为 (?<message>[\w\W]*)