Come eseguire il pipe hash md5 si traduce in shell


12

Sto cercando un modo semplice per convogliare il risultato md5sumin un altro comando. Qualcosa come questo:

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

Il mio problema è che md5sumgenera non solo l'hash della stringa, ma anche un hypen, che indica che l'input proviene da stdin. Ho controllato il file man e non ho trovato alcun flag per controllare l'output.


4
Nota: fare attenzione a non utilizzare echo -nquando i dati di testo sono sconosciuti. Usa printf '%s' "$DATA"invece. Diversamente echo -n "$DATA", funzionerà quando DATA="-n"(tra gli altri esempi).
Stéphane Gimenez,

Risposte:


14

Puoi usare il comando cut ; ti permette di tagliare un certo intervallo di caratteri / byte da ogni riga di input. Poiché l'hash MD5 ha una lunghezza fissa (32 caratteri), è possibile utilizzare l'opzione -c 1-32per mantenere solo i primi 32 caratteri dalla riga di input:

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

In alternativa, puoi dire cutdi dividere la linea in ogni spazio e generare solo il primo campo: (nota le virgolette attorno al carattere dello spazio)

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

Vedi la manpage di taglio per ulteriori opzioni.


Ci ho pensato anche io! Ho scelto -d+ in -fmodo che md5sumpossa essere sostituito con sha1sumo qualsiasi altro in seguito.
Stéphane Gimenez,

awkfunziona anche: echo -n test | md5sum | awk -F" " '{print $1}' oppureawk -F" " '{print $1}' <(echo -n test | md5sum)
laebshade

Grazie per la risposta. @laebshade In realtà, devi usare printf, altrimenti alla fine emetterà un nuovo carattere di linea;)
nmat

@laebshade: l' -F" "opzione per awkè molto strana da vedere, dato che è l'impostazione predefinita per awk.
enzotib,

3

Puoi cutfarlo:

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

Qui, -d' 'sceglie lo spazio come delimitatore e -f1chiede il primo campo (prima di un delimitatore).


2

Anche l'uso di awk funziona bene:

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

Un altro modo è creare una sottostringa. Perché sai che l'hash md5 è una stringa con 32 caratteri, puoi usare:

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

Sono solo manipolazioni di stringhe, quindi hai la scelta!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.