在命令行中使用正则表达式的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
标志(扩展模式)。