¿Cuál es el rango máximo de caracteres de grep en bash? ¿Cuánto tiempo puede tener una cadena como entrada para buscar usando el comando grep?
Respuesta1
La longitud máxima de los argumentos de la exec()
función (utilizada por el shell para iniciar un proceso) está definida por el valor de ARG_MAX
en el limits.h
encabezado. Este valor también está disponible a través del getconf
comando. En mi sistema:
$ getconf ARG_MAX
262144
Esto significa que la línea de comando completa (después de que se hayan procesado todas las sustituciones de variables, etc.),incluyendo cualquier variable de entorno y sus valores, no debe exceder los 256 KiB para que se garantice que el shell lo acepte.
POSIX garantiza que ARG_MAX
sea al menos 4096.
Para una discusión específica de Linux sobre ARG_MAX
, consulteLa respuesta de Stéphane Chazelas a una pregunta relacionada.
Para una discusión en profundidad sobre este tema verhttps://www.in-ulm.de/~mascheck/various/argmax/(Enlace externo).
Puede grep -f patterns file
omitir la longitud máxima de la línea de comando colocando los patrones que desee grep
en el archivo patterns
. El límite para la cantidad de patrones será entonces la RAM disponible en lugar de un límite impuesto por el sistema en la longitud de la línea de comando.