Como canalizar o resultado do hash md5 no shell

10

Estou procurando uma maneira simples de enviar o resultado de md5sum para outro comando. Algo parecido com isto:

$echo -n 'test' | md5sum | ...

Meu problema é que md5sum gera não apenas o hash da string, mas também um hypen, que indica que a entrada veio de stdin. Eu verifiquei o arquivo man e não encontrei nenhum sinalizador para controlar a saída.

    
por nmat 17.08.2011 / 00:18

3 respostas

14

Você pode usar o comando cortar ; Ele permite que você corte um determinado intervalo de caractere / byte de cada linha de entrada. Como o hash MD5 tem comprimento fixo (32 caracteres), você pode usar a opção -c 1-32 para manter apenas os primeiros 32 caracteres da linha de entrada:

echo -n test | md5sum | cut -c 1-32

Como alternativa, você pode dizer a cut para dividir a linha em cada espaço e gerar apenas o primeiro campo: (observe as aspas ao redor do caractere de espaço)

echo -n test | md5sum | cut -d " " -f 1

Veja a página de manual para mais opções.

    
por 17.08.2011 / 00:43
3

Você pode cut it:

echo -n 'test' | md5sum | cut -d' ' -f1

Aqui, -d' ' escolhe o espaço como delimitador e -f1 solicita o primeiro campo (antes de um delimitador).

    
por 17.08.2011 / 00:43
1

O uso do awk também funciona bem:

echo -n 'test' | md5sum | awk '{print $1}'

Outra maneira é criar uma substring. Porque você sabe que o md5 hash é uma string com 32 caracteres, você poderia usar:

HASH=$(echo -n 'test' | md5sum -) && echo ${HASH:0:32}

São apenas manipulações de string, então você tem a escolha!

    
por 07.05.2015 / 09:26