web-dev-qa-db-ja.com

ランダムな非単語を作成する

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

質問:このコード^から乱数が得られた場合、「hgcqw」などの単語(理解できない)をランダムに取得するにはどうすればよいですか。

質問2:shufコマンドをddコマンドと組み合わせて使用​​できますか?

ありがとう!

6/21アップデート。 (父の日)

@ Serg私の目標は、最初に数字を取得することでした。たとえば、01から100までの2桁のランダムな数字です。コマンドを入力してコードを実行します。最終的には、14、17、21、35になります(取得する乱数を作成しています)。次に、これらの数値の平均を求めました。この場合、平均は21.75(22)になります。目標は、探している特定の平均が見つかるまでループを停止することです。この場合、25になります。2番目の目標は、ランダムな単語を取得し、使用された単語の数を取得することでした。

@テルドン

言葉は「バック」、「アヒル」、または「古き良き運」です。基本的に辞書にあるものすべて。制限を5文字に制限する場合、長さはまだありません。どのように学習してもかまいませんか?

言葉は何ですか?私はあなたがa-zとA-Zだけを意味すると思いますが、長さは何ですか? liwyduglashvdbalishfvgapivflakhfは単語でしょうか? ksjdas-asd-asd-asdはどうですか? -言葉にすることができます。編集して明確にしてください。 –昨日のテルドン

4
ricomon

ランダムなアルファベット文字を生成します。

tr -cd '[:alpha:]' < /dev/urandom | fold -w1 | head -n1  

長さ10文字のランダムなアルファベット文字列を生成します。

tr -cd '[:alpha:]' < /dev/urandom | fold -w10 | head -n1

[:alpha:]alphaの代わりに使用する代替POSIX文字クラスの一部は次のとおりです。 alnum-英数字
alpha-アルファベット文字
digit-桁
graph-目に見えるキャラクター
lower-小文字
upper-大文字

特定の範囲で乱数を生成します(例1-10)。

shuf -i 1-10 -n1  

最初の2つのbashの例と比較すると、shufコマンドを使用すると、ランダムな文字列を生成するためのオプションが少なくなりますが、shufを使用してランダムな順列を生成できます。

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

これはあなたに乱数を与えません。これにより、ランダムにbytesが得られます。あなたはそれを数字にエンコードすることができます:

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
muru

2MBのランダムなアルファベット小文字(スペースを含む)を生成するには:

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

一定のストリームの場合:

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

2MBのランダムなアルファベットの大文字と小文字が混在した文字列(スペースを含む)を生成するには:

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

一定のストリームの場合:

< /dev/urandom tr -dc 'A-Za-z '
4
kos

他のバージョン(-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

またはddcount=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
A.B.

これが私のアイデアです。 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/

Muruがコメントbellowで示唆したように、Sudo apt-get install pwgenpwgenをインストールし、pwgen -0を実行することもできます。 -0フラグは、数字を避けるようにコマンドに指示します

そして、これがsha1pass + sedコンボです:

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-ways-to-generate-a-random-password-from-the-command-line/

3

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
  • 入力として2つのパラメーターを受け取る関数Rand_gen(number_of_words, length)を定義しました。number_of_wordsには生成するランダムワードの数が含まれ、lengthには各ランダムワードの長さが含まれます

  • string.ascii_lowercasestring.ascii_uppercaseには、それぞれすべてのASCII小文字と大文字があります

  • random.choiceは毎回[A-Za-z]から1文字を選択し、lengthはこの反復がlengthの数まで継続することを保証します。 join()は、文字を結合して、希望する長さの単語にします

  • このプロセスはnumber_of_wordsまで継続されます

例:

Rand_gen(5, 3)
PDI
qKQ
Dvu
kwr
wDz

Rand_gen(2, 5)
GLKXr
uOaHj
3
heemayl