Estou procurando uma maneira simples de canalizar o resultado de md5sum
outro comando. Algo assim:
$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 do stdin. Verifiquei o arquivo man e não encontrei nenhum sinalizador para controlar a saída.
bash
ubuntu
shell-script
hashsum
nmat
fonte
fonte
echo -n
quando os dados de texto forem desconhecidos. Use emprintf '%s' "$DATA"
vez disso. Ao contrárioecho -n "$DATA"
, funcionará quandoDATA="-n"
(entre outros exemplos).Respostas:
Você pode usar o comando cut ; permite cortar um certo intervalo de caracteres / bytes de cada linha de entrada. Como o hash MD5 possui comprimento fixo (32 caracteres), você pode usar a opção
-c 1-32
para manter apenas os primeiros 32 caracteres da linha de entrada:Como alternativa, você pode dizer
cut
para dividir a linha em todos os espaços e gerar apenas o primeiro campo: (observe as aspas ao redor do caractere de espaço)Veja a página de manual de corte para mais opções.
fonte
-d
+-f
para quemd5sum
possa ser substituído porsha1sum
ou mais tarde.awk
funciona também:echo -n test | md5sum | awk -F" " '{print $1}'
ouawk -F" " '{print $1}' <(echo -n test | md5sum)
-F" "
opção paraawk
é muito estranha de se ver, já que é o padrãoawk
.Você pode
cut
:Aqui,
-d' '
escolhe o espaço como delimitador e-f1
solicita o primeiro campo (antes de um delimitador).fonte
Usar o awk também funciona bem:
Outra maneira é fazer uma substring. Como você sabe que o md5 hash é uma string com 32 caracteres, você pode usar:
São apenas manipulações de cordas, então você tem a escolha!
fonte