如何创建不带空格的随机十六进制数字?

如何创建不带空格的随机十六进制数字?

如果我做类似的事情:

openssl rand 16 > file.txt

我得到一个如下所示的文件:

3e1c 37e2 96fc 7029 970c cc87 98fe 40f7
7c70 5a9a 30da 7b72 0064 9a54 ae9c ed91

有没有办法在没有空格和换行符的情况下做到这一点?

答案1

您可以使用tr删除空格和换行符,例如:

openssl rand 16 | tr -d '\n '  > file.txt

或者,如果您真的不记得标志,您可以使用tr将换行符转换为空格,然后使用sed删除空格。

openssl rand 16 | tr '\n' ' ' | sed 's/ //g' > file.txt

答案2

openssl rand 16不产生十六进制输出,也不openssl rand -hex 16输出空格,并且它输出 16 个字节(32 个十六进制数字),而不是 32 个字节(64 个数字)。但无论如何,如果你想删除空格和换行符,你可以使用tr

$ cat data
3e1c 37e2 96fc 7029 970c cc87 98fe 40f7
7c70 5a9a 30da 7b72 0064 9a54 ae9c ed91
$ cat data | tr -d '\n '; echo
3e1c37e296fc7029970ccc8798fe40f77c705a9a30da7b7200649a54ae9ced91

要删除所有非十六进制数字的字符,您可以使用tr -dc 0-9A-Fa-ftr -dc '[:xdigit:]'

如果你想产生随机的十六进制数字,你可以从/dev/urandom(在Linux上,可能是/dev/random/dev/arandom在其他unix变体上)获取它们。

</dev/urandom od -An -tx1 | head -c 32 | tr -d ' \n' 

相关内容