Каков максимальный диапазон символов grep в bash? Какова длина строки в качестве входных данных для поиска с помощью команды grep?
решение1
Максимальная длина аргументов функции exec()
(используемых оболочкой для запуска процесса) определяется значением ARG_MAX
в limits.h
заголовке. Это значение также доступно через getconf
команду. В моей системе:
$ getconf ARG_MAX
262144
Это означает, что вся командная строка (после обработки всех подстановок переменных и т.п.)включая любые переменные среды и их значения, не должен превышать 256 КБ, чтобы оболочка гарантированно его приняла.
POSIX гарантирует, что ARG_MAX
это значение не менее 4096.
Для обсуждения, касающегося Linux ARG_MAX
, см.Ответ Стефана Шазеласа на связанный вопрос.
Для более подробного обсуждения этого вопроса см.https://www.in-ulm.de/~mascheck/various/argmax/(внешняя ссылка).
С помощью grep -f patterns file
вы можете обойти максимальную длину командной строки, поместив нужные вам шаблоны grep
в файл patterns
. Тогда ограничением на количество шаблонов будет доступная вам оперативная память, а не ограничение на длину командной строки, налагаемое системой.