regex - grep:匹配文字 "+"

标签 regex cygwin grep

我需要在我的 sql 脚本(即 Oracle 外连接表达式)中找到“(+)”的出现。意识到“+”、“(”和“)”都是特殊的正则表达式字符,我尝试了:

grep "\(\+\)" *

现在这确实会返回出现的“(+)”,但也会返回其他行。 (似乎任何在同一行上有开括号和闭括号的东西。)回想一下,parens 只对扩展 grep 有特殊意义,我试过:

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

这两个都只返回包含“()”的行。所以假设“+”无法转义,我尝试了一个老把戏:

grep "([+])" *

行得通。我使用非正则表达式工具交叉检查了结果。

问题:有人可以解释一下“+”字符到底是怎么回事吗?有没有更简单的方法来匹配“(+)”?

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

编辑:感谢您提供解决方案。 -- 现在我看到,根据 Bruno 引用的 GNU grep 手册,“\+”在 basic 表达式中使用时会给出“+”它的扩展 意思,因此匹配一个或多个“(”后跟一个“)”。在我的文件中,它始终是“()”。

最佳答案

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

In basic regular expressions the metacharacters ?, +, {, |, (, and ) lose their special meaning; instead use the backslashed versions \?, \+, \{, \|, \(, and \).

由于你想要字符( + )普通意义,以下两种形式之一应该为您的目的工作:

grep "(+)" *       # Basic
egrep "\(\+\)" *   # Extended

关于regex - grep:匹配文字 "+",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/188787/

相关文章:

java - 从java运行grep命令后获取错误

bash - Bash脚本通过SSH远程传递命令

python - 如何构建包含选项部分的正则表达式

java - 在 Java 中使用正则表达式拆分字符串

java - 使用正则表达式搜索另一个字符串

grep - grep 中的数字导致一行

javascript - 用于检查非法搜索模式的正则表达式

c++ - Cygwin 上的 MinGW。关于链接 GNU 科学图书馆的一些问题

c++ - SDL 无法在 native 环境中编译

c - 等待 gdb 附加