grep出力からスペースとシンボルを削除する

grep出力からスペースとシンボルを削除する

この小さなスクリプトを使用してランダムなパスワードを生成しようとしています。

#!/bin/bash if [ -z $PASSWORD ]; then PASSWORD=$(date | md5sum | grep '[a-zA-Z1-9]') fi

しかし、これは次のような結果をもたらします。

15d020e6e8e6038ffb027323401ca9a9 -

私のパスワードフィールドには空白や記号を含めることはできません。

どうすれば解決できますか?私はgrep -oを試しましたが、成功しませんでした。

答え1

PASSWORD=$(date | md5sum | grep -o '[a-z0-9]*')

男 grep:

>    Repetition
>        A  regular  expression  may  be  followed  by one of several repetition
>        operators:
>        ?      The preceding item is optional and matched at most once.
>        *      The preceding item will be matched zero or more times.

PS:これは非常に安全でないパスワード生成です。使用する方が良い普遍的な根またはパスワード

答え2

出力から実際の要約を解析する方法はいくつかありますmd5sum

  1. grep -E -o '[[:alnum:]]+'、これは出力の英数字部分を返しますmd5sumが、出力に存在する場合はファイル名ビットも提供します(ファイル名が標準入力であるため質問ではありません-)。
  2. cut -d ' ' -f 1、最初の空白文字の前の出力ビットのみを返します。これは間違いなく「ネイキッド」MD5ダイジェスト文字列を取得する最も一般的な方法です。
  3. テーマのバリエーションには、次のものがcut含まれます。awk '{ print $1 }'

pwgenパスワード生成の場合は、MD5ダイジェストの代わりにMD5ダイジェストを使用することをお勧めします。主にMD5ダイジェスト(任意のデータから計算されない限り)がランダムではないためです。

ハッカーは次のものを使用できます。

tr -dc '[:alnum:]' </dev/urandom | dd bs=1 count=32 2>/dev/null

これにより、英数字の文字ストリームが抽出され、32文字以上の文字列が破棄されます/dev/urandomddその逆ddも使用できますhead -c 32

または以下を使用してくださいmd5sum(この場合は1Kb以上のランダムデータ/dev/urandom)。

dd if=/dev/urandom bs=1k count=1 | md5sum | cut -d ' ' -f 1

しかし実際にはpwgen

また、見ることができます/dev/random と /dev/urandom を使用する場合

関連情報