正则表达式 - 解析日志

时间:2018-03-20 11:14:25

标签: regex parsing

我有这个日志 -

MySite Access reject(60) - Redirect to user page

我希望能够解析它,以便(60)在一个组中,其余组在另一个组中。

我目前使用的是

([A-Za-z  \-\(\)\d]+)

接受所有这些。问题在于,当尝试对 MySite Access reject 的第一部分进行分组时,它将单词reject与(60)识别为一个单词。我不知道如何将它们分开。

任何建议都将受到赞赏。

3 个答案:

答案 0 :(得分:0)

只需使用三个捕获组即可隔离括号中的两个文本组件和数字。

<强>查找

^[^(]+\((\d+)\)(.*)$

<强>替换

$1 $3 $2

Demo

请注意,为了便于阅读,您可能希望在日志文本和数字之间添加某种分隔符。

答案 1 :(得分:0)

假设您只使用bash并且在名为log.log的文件中有上面的行,我将使用以下内容仅分别选择文本和数字(带括号)。

cat log.log | sed 's/([0-9].)//g' cat log.log | grep -o '([0-9]\+)'

答案 2 :(得分:0)

你介意两次处理一行吗?我的意思是,

你可以先做一个匹配来得到这个号码。在这里,60。 即\(([\d]+)\)

您可以再次进行匹配以获取文本。 即[^\(\d\)]