如何解决正则表达式和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\'
这将以最少的麻烦和烦恼获得您想要的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。