我需要在我的 sql 脚本(即 Oracle 外连接表达式)中找到出现的“(+)”。意识到“+”、“(”和“)”都是特殊的正则表达式字符,我尝试了:
grep "\(\+\)" *
现在这确实返回了“(+)”的出现,但也返回了其他行。(似乎任何在同一行上带有打开和关闭括号的东西。)回想一下,括号仅对扩展的 grep 是特殊的,我试过:
grep "(\+)" * grep "(\\+)" *
这两个都只返回包含“()”的行。所以假设“+”不能被转义,我尝试了一个老把戏:
grep "([+])" *
这样可行。我使用非正则表达式工具交叉检查了结果。
问题:有人能解释一下“+”字符到底是怎么回事吗?是否有一种不那么笨拙的方式来匹配“(+)”?
(我正在使用 cygwin grep 命令。)
编辑:感谢您的解决方案。-- 现在我看到,根据 Bruno 引用的 GNU grep 手册,“ \+
”在基本表达式中使用时赋予“+”其扩展含义,因此匹配一个或多个“(”后跟一个“) ”。在我的文件中总是“()”。