从符号取反直到前一个 space
Negating from symbol until the previous space
正在尝试使用 logstash grok 过滤器(oniguruma 正则表达式)来过滤一些日志。对于如下所示的日志条目:
2019-03-24 17:57:14,202 p=19455 u=root | TASK [this is the task name msg=Debug message] ************************
我写了这个过滤器:
%{DATE:date}\s%{TIME:time}\sp=(?<id>[\d]+)\su=(?<user>[\w]+)\s\|\s*TASK\s*\[(?<task>[^=]*)
这里对我来说困难的是,我需要将 "task" 标签与这个完全匹配:
"this is the task name"。此时"task"匹配“"this is the task name msg"。
当然,这只是一个示例,每个示例中的词语本身都会有所不同。
这是一个 ansible 日志,出于某种原因,它将任务名称和任务本身混合在同一行日志中,并且仅使用空格将它们分隔开。在所有情况下,由于“=”符号,我知道任务名称已完成并且正在显示任务详细信息。
所以我需要匹配直到找到一个“=”,然后取反它后面的词,在本例中是"msg"(根据任务,这个词也可以改变)。
有什么想法可以实现吗?谢谢!
您可以使用
%{DATE:date}\s%{TIME:time}\su=(?<user>\w+)\s\|\s*TASK\s*\[(?<task>[^\]=]*)\s\w+=
(?<task>[^\]=]*)\s\w+=
部分感兴趣:
(?<task>[^\]=]*)
- 名为 "task" 的组:[^\]=]*
匹配除 ]
和 =
以外的任何 0+ 个字符
\s
- 一个空格
\w+
- 1+ 个单词字符
=
- 一个 =
字符
正在尝试使用 logstash grok 过滤器(oniguruma 正则表达式)来过滤一些日志。对于如下所示的日志条目:
2019-03-24 17:57:14,202 p=19455 u=root | TASK [this is the task name msg=Debug message] ************************
我写了这个过滤器:
%{DATE:date}\s%{TIME:time}\sp=(?<id>[\d]+)\su=(?<user>[\w]+)\s\|\s*TASK\s*\[(?<task>[^=]*)
这里对我来说困难的是,我需要将 "task" 标签与这个完全匹配: "this is the task name"。此时"task"匹配“"this is the task name msg"。 当然,这只是一个示例,每个示例中的词语本身都会有所不同。
这是一个 ansible 日志,出于某种原因,它将任务名称和任务本身混合在同一行日志中,并且仅使用空格将它们分隔开。在所有情况下,由于“=”符号,我知道任务名称已完成并且正在显示任务详细信息。
所以我需要匹配直到找到一个“=”,然后取反它后面的词,在本例中是"msg"(根据任务,这个词也可以改变)。
有什么想法可以实现吗?谢谢!
您可以使用
%{DATE:date}\s%{TIME:time}\su=(?<user>\w+)\s\|\s*TASK\s*\[(?<task>[^\]=]*)\s\w+=
(?<task>[^\]=]*)\s\w+=
部分感兴趣:
(?<task>[^\]=]*)
- 名为 "task" 的组:[^\]=]*
匹配除]
和=
以外的任何 0+ 个字符
\s
- 一个空格\w+
- 1+ 个单词字符=
- 一个=
字符