0

我对以下过于简单的 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 似乎表明{and}不受支持,应替换为\{and \}。这个对吗?

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

4

1 回答 1

1

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

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

要在 中使用ERE 语法grep其中量词语法是熟悉的{m,n},您需要在命令中指定-E标志,正如您在问题中发现的那样。

于 2018-03-20T15:05:03.043 回答