当前位置:  开发笔记 > 数据库 > 正文

grep:匹配文字"+"

如何解决《grep:匹配文字"+"》经验,为你挑选了1个好方法。

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

grep "\(\+\)" *

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

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

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

grep "([+])" *

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

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

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

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



1> Bruno De Fra..:

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

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

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

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

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有