为什么这些正则表达不按预期工作?

时间:2016-05-22 17:09:00

标签: regex shell unix grep

当我运行这些命令时,我得到如下输出:

Screenshot of Terminal

这是命令和输出,以文本形式:

$ cat exte
i
ii
iii
iiii
iiiii
iiiiii

这很好用:

$ egrep --color i\{4,5\} exte
iiii
iiiii
iiiiii

我想它应该只显示一两个颜色" i"一行,但输出颜色一切:

$ egrep --color i\{1,2\} exte

i
ii
iii
iiii
iiiii
iiiiii

同样,我无法在此处看到扩展的正则表达式:

$ egrep --color i? exte
i
ii
iii
iiii
iiiii
iiiiii


$ egrep --color i+ exte
i
ii
iii
iiii
iiiii
iiiiii

1 个答案:

答案 0 :(得分:1)

此命令为所有颜色着色,因为在您的文件中有那么多我的。

$ egrep --color i\{1,2\} exte
i
ii
iii
iiii
iiiii
iiiiii

以输出中的第三行为例。您没有为行匹配行或行结束的行指定任何约束。所以,它逐一匹配。所以,第二个第三行中的前两个是匹配的。对于第三个i,它检查条件,该时间也是条件为真。所以,它匹配所有。

如果您想要更清晰的输出,可以使用-o选项来匹配所有内容。

-o: -

仅打印匹配行的匹配(非空)部分,每个此类部分位于单独的输出行上。

$ egrep --color i? exte

?在grep正则表达式中标记,它匹配前一个字符的零次或一次出现。所以,它也像上面的命令一样工作。所有的i都是一个一个匹配的正则表达式。

$ egrep --color i+ exte 

+表示匹配前一个字符的一个或多个匹配项。  因此,它会在一次出现时逐行匹配所有i。

如果要将输出视为清除格式,则必须使用-o选项。