在 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]*)
。
是否有任何选项可以直接在 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]*)
。