Grep与简单模式不匹配

时间:2013-02-26 10:38:50

标签: regex grep

我正在抓住以下过于简单的grep命令:

grep "GMT \+[0-9]{2}:[0-9]{2}" gmt_funny.txt

gmt_funny.txt包含:

2012-09-01 00:00:16.825 (GMT +02:00)

我刚刚发现grep命令与该行不匹配,除非我按如下方式指定-E

grep -E "GMT \+[0-9]{2}:[0-9]{2}" gmt_funny.txt

这是否意味着grep不处理扩展的正则表达式? man grep似乎表示不支持{},应由\{\}替换。这是对的吗?

如果是,是否有解释这种误导性的grep特定行为?

1 个答案:

答案 0 :(得分:1)

默认情况下,grep使用BRE syntax,其中量词语法\{m,n\}在大括号中需要反斜杠\。所以你的第一个命令可以改为:

grep "GMT \+[0-9]\{2\}:[0-9]\{2\}" gmt_funny.txt

要使用grep中的ERE syntax,其中量词语法是熟悉的{m,n},您需要在命令中指定-E flag,因为您已在问题