在命令行中使用正则表达式的grep

我感兴趣的是使用正则表达式寻找像%CHILD_NAME%,%PARENT_NAME%,%ADDRESS%这样的模式,并且最好在当前目录中递归地使用。以下是我正在使用的grep命令

grep -r "(.[A-Z]+[_]*[A-Z]+%)" *

当我在http://www.regexr.com上使用相同的正则表达式时,它与%CHILD_NAME%匹配,但是我的命令无法在当前或子目录中的任何文件中找到此模式。


默认情况下,grep使用基本的正则表达式,像+这样的元字符会失去其含义并需要转义。 删除捕获组( ) ,转义+量词并使用实际的%代替.

grep -r '%[A-Z]+[_]*[A-Z]+%' *

虽然,你可能可以使用以下内容:

grep -r "%[A-Z_]+%" *

首先,你的正则表达式太普通:在匹配CHILD_NAME% (前面没有% )的情况下。 更好的正则表达式是:

"%[A-Z]+(_[A-Z]+)*%"

接下来,建议使用-P标志使用正则表达式的perl解释:

grep -r -P "%[A-Z]+(_[A-Z]+)*%" .

您也可以在这里使用-E标志(扩展模式)。

链接地址: http://www.djcxy.com/p/78057.html

上一篇: grep with regular expression in command line

下一篇: grep command that works on Ubuntu, but not on Fedora