grep:匹配文字"+"

Chr*_*Noe 2 regex grep cygwin

我需要在我的sql脚本中找到"(+)"的出现位置(即Oracle外连接表达式).意识到"+","("和")"都是特殊的正则表达式字符,我试过:

grep "\(\+\)" *

现在这确实返回"(+)"的出现,但也返回其他行.(看起来在同一条线上有任何开放和关闭的parens.)回想一下parens只适用于扩展grep,我试过:

grep "(\+)" *
grep "(\\+)" *

这两个都只返回包含"()"的行.因此,假设"+"无法转义,我尝试了一个老技巧:

grep "([+])" *

这样可行.我用非正则表达式工具交叉检查结果.

问题:有人可以用"+"字符解释究竟发生了什么吗?在"(+)"上匹配的方式是否较少?

(我正在使用cygwin grep命令.)

编辑:谢谢你的解决方案.- 现在我看到,根据Bruno引用的GNU grep手册," \+"在基本表达式中使用时,"+"表示扩展含义,因此匹配一个或多个"("s后跟一个") ".在我的文件中,总是"()".

Bru*_*ine 10

GNU grep(包含在Cygwin中)支持正则表达式的两种语法:基本和扩展.grep使用基本正则表达式和/ egrepgrep -E使用扩展正则表达式.grep手册的基本区别如下:

在基本的正则表达式的元字符?,+,{,|,(,和)失去了特殊的意义; 改用反斜杠的版本\?,\+,\{,\|,\(,和\).

由于您需要字符的普通含义,因此( + )以下两种形式之一应该适用于您的目的:

grep "(+)" *       # Basic
egrep "\(\+\)" *   # Extended
Run Code Online (Sandbox Code Playgroud)