Qual é o intervalo máximo de caracteres do grep no bash? Quanto tempo uma string pode ter como entrada para pesquisa usando o comando grep?
Responder1
O comprimento máximo dos argumentos da exec()
função (usados pelo shell para iniciar um processo) é definido pelo valor de ARG_MAX
no limits.h
cabeçalho. Este valor também está disponível através do getconf
comando. No meu sistema:
$ getconf ARG_MAX
262144
Isso significa que a linha de comando completa (após todas as substituições de variáveis, etc. terem sido processadas),incluindo quaisquer variáveis de ambiente e seus valores, não deve exceder 256 KiB para que o shell tenha garantia de aceitá-lo.
POSIX garante que ARG_MAX
é pelo menos 4096.
Para uma discussão específica do Linux sobre ARG_MAX
, consulteA resposta de Stéphane Chazelas a uma pergunta relacionada.
Para uma discussão aprofundada sobre este assunto, consultehttps://www.in-ulm.de/~mascheck/various/argmax/(link externo).
Com grep -f patterns file
você pode ignorar o comprimento máximo da linha de comando colocando os padrões que deseja grep
no arquivo patterns
. O limite para o número de padrões será então a RAM disponível, em vez de um limite imposto pelo sistema no comprimento da linha de comando.