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

时间:2014-08-02 15:51:32

标签: regex grep

我有兴趣使用正则表达式查找%CHILD_NAME%,%PARENT_NAME%,%ADDRESS%等模式,最好在当前目录中递归查找 以下是我正在使用的grep命令

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

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

2 个答案:

答案 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标志(扩展模式)。