如果我做类似的事情:
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-f
或tr -dc '[:xdigit:]'
。
如果你想产生随机的十六进制数字,你可以从/dev/urandom
(在Linux上,可能是/dev/random
或/dev/arandom
在其他unix变体上)获取它们。
</dev/urandom od -An -tx1 | head -c 32 | tr -d ' \n'