我有兴趣使用正则表达式查找%CHILD_NAME%,%PARENT_NAME%,%ADDRESS%等模式,最好在当前目录中递归查找 以下是我正在使用的grep命令
grep -r "(.[A-Z]+[_]*[A-Z]+%)" *
当我在http://www.regexr.com上使用相同的正则表达式时,它与%CHILD_NAME%匹配,但我的命令无法在当前或子目录中的任何文件中找到此模式。
答案 0 :(得分:2)
默认情况下,grep使用基本的正则表达式,而像+
这样的元字符会失去意义并需要进行转义。移除捕获组( )
,转义+
量词并使用实际%
代替.
grep -r '%[A-Z]\+[_]*[A-Z]\+%' *
虽然,您可以使用以下内容:
grep -r "%[A-Z_]\+%" *
答案 1 :(得分:0)
首先,你的正则表达式过于通用:匹配CHILD_NAME%
(前面没有%
)。更好的正则表达式是:
"%[A-Z]+(_[A-Z]+)*%"
接下来,建议使用perl
标记对正则表达式进行-P
解释:
grep -r -P "%[A-Z]+(_[A-Z]+)*%" .
您也可以在此处使用-E
标志(扩展模式)。