正则表达式和grep异常匹配

问题描述

我测试了我的正则表达式是否匹配日志文件中的异常: http://gskinner.com/RegExr/ 正则表达式是:
.+Exception[^\\n]+(\\s+at.++)+
它适用于我在此处粘贴的几种情况,但不适用于grep:
grep \'.+Exception[^\\n]+(\\s+at.++)+\' server.log
grep是否需要一些额外的标志来使其与正则表达式一起工作? 更新: 它不必是正则表达式,我正在寻找可以打印异常的任何东西。     

解决方法

并非所有版本的“ 2”都理解相同的语法。 您的花样包含1个或多个重复的
+
,这表示它位于
egrep
范围内。 但是它也有
\\s
表示空白,大多数
grep
版本都不知道。 最后,您有
++
表示前一个原子的所有格匹配,只有相当复杂的正则表达式引擎才能理解。您可以尝试非所有匹配。 但是,您不需要前导ѭ8,因此您可以直接跳到所需的字符串。另外,我看不出为什么要使用
[^\\n]
,因为那通常是ѭ10means的意思,而且无论如何您都已在线路模式下操作。 如果您有
grep -P
,可以尝试一下。我使用的是您的模式的一个简单但等效的版本;您没有使用
grep
选项,该选项仅给出完全匹配项,因此我假设您想要整个记录:
$ grep -P \'Exception.+\\sat\' server.log
但是,如果那行不通,您总可以拿出强大的武器:
$ perl -ne \'print if /Exception.+\\sat/\' server.log
如果您只需要完全匹配,则可以使用
$ perl -nle \'print $& if /Exception.*\\bat\\b.*/\' server.log
那应该给你足够的变化来玩。 我不明白为什么人们只能在命令行上使用现有工具来进行基于Web的“正则表达式”构建器,因为那样他们就可以绝对确定他们设计的模式可以与这些工具一起使用。     ,您需要将其传递给
-e <regex>
选项,如果要使用扩展的正则表达式
-E -e <regex>
。看那个男人::18ѭ     ,您似乎正在尝试查找类似于以下内容的行:
... Exception foobar at line 7 ...
因此,首先,要使用正则表达式,必须将
-e
grep
一起使用,或者可以只运行
egrep
。 接下来,您实际上不必在表达式的开头指定
.+
。通常最好将搜索内容最小化。如果必须在\“ Exception \”之前至少有一个字符,则只需使用
.
。 同样,“ 5”是一种要求空间的不完美的方式。 grep使用POSIX正则表达式,因此等效为
[[:space:]]
。 因此,我将使用:
 grep -e \'Exception.*[[:space:]]at\'
这将以最少的麻烦和烦恼获得您想要的。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...