我正在抓住以下过于简单的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特定行为?
答案 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,因为您已在问题