Lo he estado usando con grep -imás frecuencia y descubrí que es más lento que su egrepequivalente, donde coincido con la letra mayúscula o minúscula de cada letra:
$ time grep -iq "thats" testfile
real 0m0.041s
user 0m0.038s
sys 0m0.003s
$ time egrep -q "[tT][hH][aA][tT][sS]" testfile
real 0m0.010s
user 0m0.003s
sys 0m0.006s
¿Hace grep -ipruebas adicionales que egrepno?
grep
performance
tildearrow
fuente
fuente

greprevés para asegurarse de que no está midiendo la diferencia entre el almacenamiento en caché de disco de la mosca.egrepes más rápido quegrephasta que configuréLANG=Cy luego ambos son más o menos lo mismo.usertiempo (que no incluye el tiempo de espera para el disco). Hay un orden de magnitud en la diferencia.Respuestas:
grep -i 'a'es equivalente agrep '[Aa]'en un entorno local solo ASCII. En un entorno local Unicode, las equivalencias y conversiones de caracteres pueden ser complejas, por lo que esgrepposible que tenga que hacer un trabajo adicional para determinar qué caracteres son equivalentes. La configuración regional relevante esLC_CTYPE, que determina cómo se interpretan los bytes como caracteres.En mi experiencia, GNU
greppuede ser lento cuando se invoca en un entorno local UTF-8. Si sabe que solo está buscando caracteres ASCII, invocarlo en una configuración regional solo ASCII puede ser más rápido. Eso esperoproduciría tiempos indistinguibles.
Dicho esto, no puedo reproducir su hallazgo con GNU
grepen Debian jessie (pero no especificó su archivo de prueba). Si configuro un entorno local ASCII (LC_ALL=C),grep -ies más rápido. Los efectos dependen de la naturaleza exacta de la cadena, por ejemplo, una cadena con caracteres repetidos reduce el rendimiento ( que es de esperar ).fuente
-i) con configuraciones regionales multibyte debería haber mejorado en 2.17 .grep -i 'a'es equivalente agrep '[Aa]'en cualquier localidad. El ejemplo correcto esgrep -i 'i'cuál esgrep '[Ii]'ogrep '[İi]'(Mayúscula I con punto arriba, U + 130, configuración regional turca). Sin embargo, no hay una manera eficiente degrepencontrar esta clase de equivalencia dada una localización.Por curiosidad, probé esto en un sistema Arch Linux:
Y luego algunas estadísticas cortesía de ¿Hay alguna forma de obtener el mínimo, el máximo, la mediana y el promedio de una lista de números en un solo comando? :
Estoy en el
en_GB.utf8lugar, pero los tiempos son casi indistinguibles.fuente