Я использую 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
интерпретирует+-.
как диапазон;,
Находится внутри этого диапазона. Я имел в виду буквально+-._
, не включая,
.