Não, não existe tal coisa. Geralmente, o custo de iniciar grep
(bifurcar um novo processo, carregar o executável, biblioteca compartilhada, ligação dinâmica ...) seria muito maior do que compilar os regexps, portanto, esse tipo de otimização faria pouco sentido.
Embora veja Por que a correspondência de 1250 strings contra padrões de 90k é tão lenta? sobre um bug em algumas versões do GNU grep
que tornaria particularmente lento para um grande número de regexps.
Possivelmente aqui, você poderia evitar executar grep
várias vezes alimentando seus fragmentos com a mesma grep
instance, por exemplo, usando-o como co-processo e usando um marcador para detectar o fim. Com zsh
e% GNU grep
e awk
implementações diferentes de mawk
:
coproc grep -E -f patterns -e '^@@MARKER@@$' --line-buffered
process_chunk() {
{ cat; echo @@MARKER@@; } >&p & awk '$0 == "@@MARKER@@"{exit};1' <&p
}
process_chunk < chunk1 > chunk1.grepped
process_chunk < chunk2 > chunk2.grepped
Embora seja mais simples fazer a coisa toda com awk
ou perl
.
Mas, se você não precisar que a saída grep
entre em arquivos diferentes para partes diferentes, sempre será possível fazer isso:
{
cat chunk1
while wget -qO- ...; done # or whatever you use to fetch those chunks
...
} | grep -Ef patterns > output