Como eu crio dígitos hexadecimais aleatórios sem espaços?

3

Se eu fizer algo como:

openssl rand 16 > file.txt

Eu recebo um arquivo assim:

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

Existe uma maneira de fazer isso sem os espaços de caracteres de nova linha?

    
por StormyKnight 12.05.2017 / 02:12

2 respostas

3

Você pode usar tr para excluir os espaços e as novas linhas, como:

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

Ou se você for realmente um sinalizador de recordação, use tr para converter as novas linhas em espaços e, em seguida, use sed para remover os espaços.

openssl rand 16 | tr '\n' ' ' | sed 's/ //g' > file.txt
    
por 12.05.2017 / 02:21
2

openssl rand 16 não produz saída hexadecimal e openssl rand -hex 16 não produz espaço em branco, e gera 16 bytes (32 dígitos hexadecimais), não 32 bytes (64 dígitos). Mas de qualquer forma, se você quiser remover espaços e novas linhas, você pode usar 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

Para remover todos os caracteres que não são dígitos hexadecimais, você pode usar tr -dc 0-9A-Fa-f ou tr -dc '[:xdigit:]' .

Se você quiser produzir dígitos hexadecimais aleatórios, é possível obtê-los em /dev/urandom (no Linux, pode ser /dev/random ou /dev/arandom em outras variantes unix).

</dev/urandom od -An -tx1 | head -c 32 | tr -d ' \n' 
    
por 14.05.2017 / 01:27