Saya telah menggunakan grep -i
lebih sering dan saya menemukan bahwa itu lebih lambat daripada yang egrep
setara, di mana saya cocok dengan huruf besar atau kecil dari setiap huruf:
$ 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
Apakah grep -i
melakukan tes tambahan yang egrep
tidak?
grep
performance
tildearrow
sumber
sumber
grep
sebaliknya, untuk memastikan Anda tidak mengukur perbedaan antara cache disk dari flie.egrep
lebih cepat daripadagrep
sampai saya mengaturLANG=C
dan kemudian mereka berdua kira-kira sama.user
waktu (yang tidak termasuk waktu menunggu disk). Ada urutan besarnya perbedaan.Jawaban:
grep -i 'a'
setara dengangrep '[Aa]'
lokal ASCII saja. Di lokal Unicode, persamaan karakter dan konversi bisa rumit, jadigrep
mungkin harus melakukan pekerjaan ekstra untuk menentukan karakter yang setara. Pengaturan lokal yang relevan adalahLC_CTYPE
, yang menentukan bagaimana byte diartikan sebagai karakter.Dalam pengalaman saya, GNU
grep
bisa lambat ketika dipanggil di lokal UTF-8. Jika Anda tahu bahwa Anda sedang mencari karakter ASCII saja, memintanya dalam lokal ASCII saja mungkin lebih cepat. saya mengharapkan ituakan menghasilkan timing yang tidak bisa dibedakan.
Yang sedang berkata, saya tidak bisa mereproduksi temuan Anda dengan GNU
grep
di Debian jessie (tetapi Anda tidak menentukan file tes Anda). Jika saya menetapkan lokal ASCII (LC_ALL=C
),grep -i
lebih cepat. Efeknya tergantung pada sifat tepat dari string, misalnya string dengan karakter yang diulang mengurangi kinerja ( yang diharapkan ).sumber
-i
) dengan lokal multibyte seharusnya meningkat pada 2.17 .grep -i 'a'
setara dengangrep '[Aa]'
di daerah mana pun. Contoh yang tepat adalahgrep -i 'i'
yang managrep '[Ii]'
ataugrep '[İi]'
(Huruf I dengan titik di atas, U + 130, lokal Turki). Namun, tidak ada cara yang efisien untukgrep
menemukan kelas kesetaraan ini diberikan lokal.Karena penasaran, saya menguji ini pada sistem Arch Linux:
Dan kemudian beberapa statistik dari Apakah ada cara untuk mendapatkan min, maks, median, dan rata-rata daftar angka dalam satu perintah? :
Aku ada di
en_GB.utf8
tempat itu, tetapi waktunya hampir tidak bisa dibedakan.sumber