Я использую openssl rand в командной строке для генерации пароля. Я использую openssl rand -base64 10 для генерации пароля. Но мне нужно исключить заглавные буквы? Например, как генерировать 10 случайных символов, исключая заглавные буквы? Спасибо
2 ответа
Нет прямого способа сделать это, но вы можете создать гораздо более длинную "нормальную" строку и затем помассировать ее с помощью sed:
Предполагая, что вы используете 16 символов, просто выполните openssl rand -base64 48 | sed 's/[A-Z]//g ; s/^\(.\{16\}\).*/\1/'
openssl rand -base64 10 генерирует более 10 символов. Он генерирует 10 байтов (которые могут соответствовать непечатаемым символам) и кодирует их (используя набор печатных символов).
Для генерации случайных символов из заданного набора используйте tr . Пример:
LC_ALL=C </dev/urandom tr -cd '[:lower:][:digit:]+\-._' | head -c 10 ; printf '\n'
Здесь tr получает байты из /dev/urandom и передает только совпадающие; head завершает трубу, когда достигается указанное количество символов; printf добавляет новую строку.
Проверьте man 1 tr и постройте свой собственный желаемый набор.
Заметки:
LC_ALL=Cзаставляетtrигнорировать вашу локаль.- Я избежал 
-(следовательно,\-), потому чтоtrинтерпретирует+-.как диапазон;,Находится внутри этого диапазона. Я имел в виду буквально+-._, не включая,. 
