什么是最有效的不区分大小写的grep用法?

时间:2014-04-07 22:49:04

标签: regex linux grep case-insensitive tr

我的目标是匹配属于Yahoo!的电子邮件地址。域名系列。在* nix系统中(我将使用Ubuntu),这些方法中任何一种匹配模式的好处和缺点是什么?

如果还有其他更优雅的解决方案,我无法想象,请分享。

他们是:

  • 使用grep选项-i

grep -Ei "@(yahoo|(y|rocket)mail|geocities)\.com"

  • 将字符翻译为全部大写或小写,然后翻译为grep

tr [:upper:] [:lower:] < /path/to/file.txt | grep -E "@(yahoo|(y|rocket)mail|geocities)\.com"

  • 为模式中的每个角色添加一个字符集(下面当然不会像“@ rOcketmail.com”那样匹配,但是你知道如果我检查每个角色的情况会变成什么样):< / LI>

grep -E "@([yY]ahoo|([yY]|[rR]ocket)[mM]ail|[gG]eo[cC]ities)\.[cC][oO][mM]" /path/to/file.txt

1 个答案:

答案 0 :(得分:38)

事实上,

grep -i比在翻页前转换为降低要快得多,所以我最终使用了#2的变体。

感谢@ mike-w提醒我一个简单的测试有很长的路要走。