Создать случайные не слова [закрытые]

dd if=/dev/urandom of=a.log bs=1M count=2

Вопрос: если этот код ^ дает мне случайные числа, как я могу получить случайные не-слова (непонятные), такие как «hgcqw».

Вопрос 2. Можно ли использовать команду shuf в сочетании с командой dd?

Спасибо!

Обновление 6/21. (День отца)

@ Serg. Моя цель состояла в том, чтобы сначала получить числа. Скажем, случайные два цифры цифр от 01 до 100. Дайте команду и запустите код. В конце концов, это даст мне 14, 17, 21, 35 (я составляю, какие случайные числа я получаю). Затем я хотел получить среднее значение этих чисел. В этом случае среднее значение будет 21,75 (22). Цель состояла бы в том, чтобы остановить цикл до тех пор, пока он не найдет определенный средний показатель, который я искал. В этом случае это будет 25. Моя вторая цель состояла в том, чтобы получить случайные слова, а затем подсчитать, какие слова были использованы.

@ terdon

Слово «buck», «утка» или «хорошая старая удача». В основном все, что содержится в словаре. Длины были бы любыми, но если бы мы ограничили ограничение на 5 букв, я бы не прочь узнать, как это сделать?

Что это за слово? Предполагаю, вы имеете в виду только a-z и A-Z, но какие длины? Может ли быть лиглайшвальбалишфвгапивфлахф слово? Как насчет ksjdas-asd-asd-asd? - может быть в словах. Пожалуйста, отредактируйте и уточните. - Тердон вчера

1
задан 21 June 2015 в 18:08

5 ответов

dd if=/dev/urandom of=a.log bs=1M count=2

Это не дает вам случайных чисел. Это дает вам случайные байты. Вы можете закодировать его по номерам:

hexdump -v -e '"%d\n"' /dev/urandom | dd of=a.log bs=1M count=2

(более ранняя версия использовалась od, но формат вывода od был довольно негибким.)

Используя /dev/random напрямую может быть довольно расточительным, поскольку это поток байтов. Вы можете закодировать его до base64, а затем вычеркнуть не-алфавиты, которые должны получить в среднем 80% от входных данных:

base64 /dev/urandom | tr -cd '[[:alpha:][:space:]]'

Это имеет тенденцию оставлять довольно длинным линий. Вместо этого вы можете заменить номера символами новой строки:

base64 /dev/urandom | sed 's/[^[:alpha:]]\+/\n/g'
7
ответ дан 23 May 2018 в 19:40
  • 1
    Это путь быстрее моей версии, однако вы проверили вывод? Он не содержит пробелов, и он случайным образом разбивается на строки. – kos 19 June 2015 в 20:08
  • 2
    @kos из base64? – muru 19 June 2015 в 20:11
  • 3
    Да, он печатает строки длины относительно ширины терминала, не содержащего пробелов – kos 19 June 2015 в 20:16
  • 4
    @kos base64 сбрасывает строки из 80 символов, без пробелов (удаление цифр оставляет более короткие строки). Вы должны будете использовать fold или что-то, чтобы получить ровное расщепление. – muru 19 June 2015 в 20:18
  • 5
    @kos как насчет base64 /dev/urandom | sed 's/[^[:alpha:]]/ /g'? – muru 19 June 2015 в 20:30

Чтобы генерировать случайную буквенную строчную строку (включая пробелы) 2MB:

< /dev/urandom tr -dc 'a-z ' | head -c 2000000 > a.log

Для постоянного потока:

< /dev/urandom tr -dc 'a-z '

Чтобы создать случайный алфавитный смешанный -case string (включая пробелы) 2MB:

< /dev/urandom tr -dc 'A-Za-z ' | head -c 2000000 > a.log

Для постоянного потока:

< /dev/urandom tr -dc 'A-Za-z '
4
ответ дан 23 May 2018 в 19:40
  • 1
    Работает, но в конце нуждается в | head -c #, чтобы он произносил слово в # количестве символов – Terrance 19 June 2015 в 19:36
  • 2
    @Terrance Там вы идете – kos 19 June 2015 в 19:38
  • 3
    У тебя есть +1. :) Прекрасно работает! – Terrance 19 June 2015 в 19:42
  • 4
    Аналогичное решение Ruby: ruby -e '100.times do print [*?a..?z," "].sample; end' – Doorknob 20 June 2015 в 09:09

Другая версия (-c${1:-10} = длина 10):

< /dev/urandom tr -dc A-Za-z | head -c${1:-10} > out

или (head -n 10 = длина 10)

strings /dev/urandom | grep -o '[[:alpha:]]' | head -n 10 | tr -d '\n' > out

или с dd (count=10 = длина 10)

dd if=/dev/urandom bs=1 count=10 2>/dev/null | base64 | grep -o '[[:alpha:]]' | head -n 30 | tr -d '\n' > out

или это

openssl rand -base64 32| grep -o '[[:alpha:]]' | head -n 10 | tr -d '\n' > out

или это

date +%s | sha256sum | base64 | grep -o '[[:alpha:]]'| head -n 10 | tr -d '\n' > out
3
ответ дан 23 May 2018 в 19:40

Вот моя идея. mkpasswd часто используется для генерации зашифрованных паролей, поэтому строки там не должны быть понятными уже. Небольшая проблема заключается в том, что он генерирует строки с числами. Используя sed, мы можем избавиться от них.

mkpasswd | sed 's/[0-9]/YOLO/g'

YOLO может быть тем, что вы хотите заменить цифрами. Вы также можете просто удалить их:

mkpasswd | sed 's/[0-9]//g'

Вот еще один способ:

$ date | md5pass | sed 's/[0-9]//g'                                                                                                   
$$NG.dLw$vcpGCylnDtmptDtogDr/

Как показано в комментариях к комментариям, вы также можете установить pwgen, с sudo apt-get install pwgen и запустить pwgen -0. Флаг -0 сообщает команде избегать цифр

И вот sha1pass + sed combo:

sha1pass | sed 's/[[:digit:]]//g' | sed 's/[[:punct:]]//g' Результат: PoXGAlAWjzMHgmfzHiYHGpemzqE

Другой метод с $ RANDOM: echo $RANDOM | tr '0-9' 'a-z'

В целом, если ваша цель - генерация пароля, я предлагаю вам прочитать эту статью:

http://www.howtogeek.com/howto/30184/ 10-пути-к-генерировать-а-случайный-пароль-из-командной строки /

3
ответ дан 23 May 2018 в 19:40
  • 1
    [F1]! pwgen -0 делает это. – muru 19 June 2015 в 20:08
  • 2
    @muru yup, хороший, но требует установки – Sergiy Kolodyazhnyy 19 June 2015 в 20:10
  • 3
    Примечание tr специально для этого, нет необходимости в sed: tr -d '[[:digit:]] и т. Д. – fedorqui 19 June 2015 в 22:39
  • 4
    Я не искал подход с генератором паролей, но очень благодарен за информацию @ Serg. Я действительно думал о том, как это было сделано. @ Serg. – ricomon 21 June 2015 в 18:00

Используя python:

#!/usr/bin/env python2
import random, string 
def rand_gen(number_of_words, length):
    for i in range(number_of_words):
        print ''.join(random.choice(string.ascii_lowercase + string.ascii_uppercase) for _ in range(length))
    return
Мы определили функцию rand_gen(number_of_words, length), которая будет принимать два параметра в качестве входных данных, number_of_words будет содержать количество случайных слов, которые вы хотите сгенерировать, [ f6] будет содержать длину каждого случайного слова string.ascii_lowercase и string.ascii_uppercase, все буквы ASCII и верхние буквы соответственно random.choice будут выбирать один символ из [A-Za-z] каждый раз, а length будет обеспечивать продолжение этой итерации до номера length. join() затем присоединяется к символам, чтобы иметь слово требуемой длины. Этот процесс будет продолжен до number_of_words

Пример:

rand_gen(5, 3)
PDI
qKQ
Dvu
kwr
wDz

rand_gen(2, 5)
GLKXr
uOaHj
3
ответ дан 23 May 2018 в 19:40

Другие вопросы по тегам:

Похожие вопросы: