为什么[a-z] {3}和[[:lower:]] {3}在egrep中有所不同?

时间:2011-12-27 03:57:34

标签: regex grep

请尝试

egrep "^[a-z]{3}$" /usr/share/dict/words

egrep "^[[:lower:]]{3}$" /usr/share/dict/words

第一个返回大写和小写单词。 第二个只返回小写单词。

1 个答案:

答案 0 :(得分:1)

你确定吗?在我的系统(OS X Snow Leopard)上,两个命令都返回完全相同的结果;所有3个字母的小写单词。

$ egrep "^[a-z]{3}$" /usr/share/dict/words | wc -l
    1134
$ egrep "^[[:lower:]]{3}$" /usr/share/dict/words | wc -l
    1134

$ egrep "^[[:lower:]]{3}$" /usr/share/dict/words | md5
0a66d5e78cfbe6f9f66d2d90b1053972
$ egrep "^[a-z]{3}$" /usr/share/dict/words | md5
0a66d5e78cfbe6f9f66d2d90b1053972

您使用的是什么系统?也许尝试man egrep并查找区分大小写选项。 OSX附带的egrep仅提供相反的-i, --ignore-case ignore case distinctions

更新

我也在CentOS linux机箱上验证了这一点:

$ egrep "^[a-z]{3}$" /usr/share/dict/words | wc -l
2044
$ egrep "^[[:lower:]]{3}$" /usr/share/dict/words | wc -l
2044
$ egrep "^[a-z]{3}$" /usr/share/dict/words | md5sum 
480fb21554f9f731adddb0d648157926  -
$ egrep "^[[:lower:]]{3}$" /usr/share/dict/words | md5sum 
480fb21554f9f731adddb0d648157926  -

更新#2:

您的评论似乎表明您可能会将-i--ignore-case选项传递给egrep。将其关闭以仅获得小写结果。