Ich habe grep -i
öfter verwendet und festgestellt, dass es langsamer als das egrep
Äquivalent ist, bei dem ich die Groß- oder Kleinschreibung jedes Buchstabens vergleiche:
$ 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
Führt grep -i
zusätzliche Tests durch, egrep
die nicht durchgeführt werden?
grep
performance
Tildearrow
quelle
quelle
grep
Sie es anders herum, um sicherzustellen, dass Sie nicht den Unterschied zwischen dem Disk-Caching des Flies messen.egrep
ist das schneller alsgrep
bis ich es eingestellt habeLANG=C
und dann sind beide ungefähr gleich.user
Zeit an (ohne Wartezeit auf die Festplatte). Es gibt eine Größenordnung in der Differenz.Antworten:
grep -i 'a'
entsprichtgrep '[Aa]'
einem Nur-ASCII-Gebietsschema. In einem Unicode-Gebietsschema können Zeichenäquivalenzen und -konvertierungen komplex sein. Daher mussgrep
möglicherweise zusätzliche Arbeit geleistet werden, um festzustellen, welche Zeichen äquivalent sind. Die relevante LändereinstellungLC_CTYPE
bestimmt, wie Bytes als Zeichen interpretiert werden.Nach meiner Erfahrung kann GNU
grep
langsam sein, wenn es in einem UTF-8-Gebietsschema aufgerufen wird. Wenn Sie wissen, dass Sie nur nach ASCII-Zeichen suchen, ist das Aufrufen in einem Nur-ASCII-Gebietsschema möglicherweise schneller. Das erwarte ichwürde zu ununterscheidbaren Zeiten führen.
grep
Abgesehen davon kann ich Ihr Ergebnis mit GNU auf Debian jessie nicht reproduzieren (aber Sie haben Ihre Testdatei nicht angegeben). Wenn ich ein ASCII-Gebietsschema (LC_ALL=C
) einstelle ,grep -i
ist das schneller. Die Auswirkungen hängen von der genauen Art der Zeichenfolge ab. Beispielsweise verringert eine Zeichenfolge mit wiederholten Zeichen die Leistung ( was zu erwarten ist ).quelle
-i
Berücksichtigung der Groß- und Kleinschreibung ( ) mit Multibyte-Gebietsschemata sollte sich in 2.17 verbessert haben .grep -i 'a'
diesgrep '[Aa]'
in jedem Gebietsschema gleichwertig ist . Das richtige Beispiel istgrep -i 'i'
entwedergrep '[Ii]'
odergrep '[İi]'
(Großbuchstabe I mit Punkt oben, U + 130, türkisches Gebietsschema). Es gibt jedoch keine effiziente Möglichkeitgrep
, diese Äquivalenzklasse für ein bestimmtes Gebietsschema zu finden.Aus Neugier habe ich dies auf einem Arch Linux-System getestet:
Und dann einige Statistiken mit freundlicher Genehmigung von Gibt es eine Möglichkeit, den Min, Max, Median und Durchschnitt einer Zahlenliste in einem einzigen Befehl zu ermitteln? :
Ich bin auf dem
en_GB.utf8
Gebietsschema, aber die Zeiten sind fast nicht zu unterscheiden.quelle