grep -i 'a'
é equivalente a grep '[Aa]'
em uma localidade somente ASCII. Em uma localidade Unicode, as equivalências de caracteres e conversões podem ser complexas, portanto, grep
pode ter que fazer um trabalho extra para determinar quais caracteres são equivalentes. A configuração de localidade relevante é LC_CTYPE
, que determina como os bytes são interpretados como caracteres.
Na minha experiência, o GNU grep
pode ser lento quando invocado em uma localidade UTF-8. Se você sabe que está procurando somente caracteres ASCII, invocá-lo em uma localidade somente ASCII pode ser mais rápido. Espero que
time LC_ALL=C grep -iq "thats" testfile
time LC_ALL=C egrep -q "[tT][hH][aA][tT][sS]" testfile
produziria horários indistinguíveis.
Dito isto, não consigo reproduzir sua descoberta com o GNU grep
no Debian jessie (mas você não especificou seu arquivo de teste). Se eu definir uma localidade ASCII ( LC_ALL=C
), grep -i
será mais rápido. Os efeitos dependem da natureza exata da string, por exemplo, uma string com caracteres repetidos reduz o desempenho ( que é como seria de esperar ).