Considérer:
$ time lzop -d < tvtropes-index.lzo | egrep -B 5 '[Dd][eE][sS][cC][eE][nN][dD] ?[Ff][rR][oO][mM]'
real 0m0.438s
$ time lzop -d < tvtropes-index.lzo | egrep -B 5 'descend ?from' -i
real 0m11.294s
Les deux casse de manière insensible. Pourquoi la -i
version est-elle si lente? Comment je fais grep -i
vite sans entrer des choses comme [iI] [nN] [tT] [hH] [iI] [sS] [wW] [aA] [Yy]?
Par exemple,
perl -ne 'print if /descend ?from/i'
fonctionne vite, mais '-B 5' n'est pas aussi simple à implémenter que dans grep (ainsi que d'autres options).
Réponses:
Le pliage de la caisse est difficile
Vous pourriez peut-être accélérer le processus en persuadant grep que le monde est de nouveau en ASCII, soit en utilisant un ancien grep, soit en jouant avec les paramètres régionaux (LC_ALL = C?).
Cette conversation mentionne "des ralentissements massifs des environnements locaux UTF8" mais n'aide pas.
la source
LANG=C grep -i
échoue (lent).lzop -d < thingy | tr '[A-Z]' '[a-z]' | grep ...
peut-être?Hypothèse
Cela explique ce résultat contre-intuitif. Votre expression rationnelle n'est pas la même,
grep -i
car ellegrep -i
est plus générale, en tenant compte de la gestion complexe des chaînes multi-octets, du moins lorsqu'elle est compilée avec le symbole du préprocesseurMBS_SUPPORT
.Jetez un coup d'oeil ici:
http://cvs.savannah.gnu.org/viewvc/grep/grep/src/search.c?revision=1.42&view=markup
Cherchez
match_icase
etMBS_SUPPORT
.la source
Si le cas réel de la découverte n'est pas critique, vous pouvez utiliser
tr
à plier[A-Z]
pour[a-z]
avantgrep
.la source