Я использовал grep -i
чаще и обнаружил, что это медленнее, чем его egrep
эквивалент, где я сопоставляю верхний или нижний регистр каждой буквы:
$ 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
Есть grep -i
ли дополнительные тесты, которые egrep
не делают?
grep
performance
tildearrow
источник
источник
grep
все наоборот, чтобы убедиться, что вы не измеряете разницу между кэшированием диска мухи.egrep
быстрее, чемgrep
до того, как я установлю,LANG=C
и тогда они оба примерно одинаковы.user
время (которое не включает время ожидания диска). Существует разность порядка.Ответы:
grep -i 'a'
эквивалентноgrep '[Aa]'
в ASCII-только локали. В локали Unicode эквивалентности и преобразования символов могут быть сложными, поэтомуgrep
может потребоваться дополнительная работа, чтобы определить, какие символы эквивалентны. Соответствующий параметр локалиLC_CTYPE
, который определяет, как байты интерпретируются как символы.По моему опыту, GNU
grep
может быть медленным при вызове в локали UTF-8. Если вы знаете, что ищете только символы ASCII, то его вызов в локали только для ASCII может быть быстрее. Я ожидаю чтобудет производить неразличимые сроки.
При этом я не могу воспроизвести ваши находки с помощью GNU
grep
для Debian jessie (но вы не указали свой тестовый файл). Если я установил ASCII locale (LC_ALL=C
),grep -i
это быстрее. Эффекты зависят от точного характера строки, например, строка с повторяющимися символами снижает производительность ( что и следовало ожидать ).источник
-i
) с многобайтовыми локалями должна была улучшиться в 2.17 .grep -i 'a'
это эквивалентноgrep '[Aa]'
любой локали. Правильный пример -grep -i 'i'
либоgrep '[Ii]'
илиgrep '[İi]'
(Прописная буква I с точкой выше, U + 130, турецкая локаль). Однако эффективного способаgrep
найти этот класс эквивалентности для данной локали не существует.Из любопытства я проверил это в системе Arch Linux:
А затем некоторые статистические данные любезно предоставлены. Есть ли способ получить минимальное, максимальное, среднее значение и среднее для списка чисел в одной команде? :
Я на
en_GB.utf8
месте, но времена почти неразличимы.источник