Algum material de referência:
GNU grep uses the well-known Boyer-Moore algorithm, which looks first for the final letter of the target string, and uses a lookup table to tell it how far ahead it can skip in the input whenever it finds a non-matching character.
de Por que o GNU grep é rápido .
The algorithm preprocesses the string being searched for (the pattern), but not the string being searched in (the text). [...] In general, the algorithm runs faster as the pattern length increases.
de Algoritmo de pesquisa de strings Boyer – Moore .
Conclusão: use strings mais longas .
Agora, um pouco de referência para se divertir:
# Initialisation
cd $(mktemp -d) && dd if=/dev/urandom of=random bs=1M count=1000
# Version
grep --v' # grep (GNU grep) 2.9
# Benchmark
(for s in 'short' 'this is not so short and we could even consider this as pretty long'; do for t in {1..10}; do time grep "$s" random; done; done ) 2> result
Resultados: 0,952s é a média para a string curta, 0,244s é a média para a string longa.
NB : O tamanho não é o único critério a ser considerado.