n=2048; i=0; while ((i<$n)) ; do echo $(head -c 40 /dev/urandom) ; let i++ ; done | tr -d '\000-\011\013-\037\177-\377' | tr '{}[]()?\\|.^$' '*' >rp.txt ; j=1; while ((j<=$n)) ; do i=0; echo $j ; time while ((i<$n)) ; do tail +$i rp.txt | head -$j > rps.txt ; echo "foo" | grep -f rps.txt ; let i+=$j ; done ; let j*=2 ; done >data.txt 2>&1 ; grep -v user data.txt | grep -v sys | grep -v "^$" | sed 's/real[^0-9]*//' | tr '\n' ' ' | sed 's/s /s\n/g' Times for checking against 2048 patterns: (Number of patterns per grep call, total time for all 2048) 1 0m35.421s 2 0m18.805s 4 0m9.165s 8 0m4.763s 16 0m2.640s 32 0m1.780s 64 0m1.414s 128 0m1.511s 256 0m2.317s 512 0m4.047s 1024 0m7.221s 2048 0m16.192s Times for checking against 4096 patterns: (Number of patterns per grep call, total time for all 4096) 1 1m10.990s 2 0m35.767s 4 0m18.496s 8 0m9.567s 16 0m5.116s 32 0m3.200s 64 0m2.842s 128 0m2.988s 256 0m4.547s 512 0m7.946s 1024 0m15.357s 2048 0m37.257s 4096 2m47.939s