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

sbl*_*k89 37 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"那样匹配,但是如果我检查每个字符的情况,你会知道它会变成什么样):

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

sbl*_*k89 39

grep -i 结果显示比在翻转之前转换为降低要慢得多,所以我最终使用了#2的变体.

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

  • 并感谢您与我们所有人分享您的测试结果! (4认同)