从 grep 输出中删除空格和符号

从 grep 输出中删除空格和符号

我正在尝试用这个小脚本生成一个随机密码

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

但这会产生如下结果:

15d020e6e8e6038ffb027323401ca9a9 -

我的密码字段不能有任何空白或符号,我想使用标准 bash 命令,因为这将在裸 Docker 环境中执行。

我该如何解决?我尝试了 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 摘要(除非通过随机数据计算)不是随机的。

黑客可以使用类似的东西

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

这将从中提取字母数字字符流,/dev/urandomdd在 32 个这样的字符后切断该流。相反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

相关内容