Ich suche nach einer einfachen Möglichkeit, das Ergebnis von md5sum
in einen anderen Befehl umzuleiten. Etwas wie das:
$echo -n 'test' | md5sum | ...
Mein Problem ist das md5sum
nicht nur der Hash des Strings ausgegeben wird, sondern auch ein Bindestrich, der anzeigt, dass die Eingabe von stdin stammt. Ich habe die Man-Datei überprüft und keine Flags zur Steuerung der Ausgabe gefunden.
bash
ubuntu
shell-script
hashsum
nmat
quelle
quelle
echo -n
wenn die Textdaten unbekannt sind. Verwenden Sieprintf '%s' "$DATA"
stattdessen. Im Gegensatz dazuecho -n "$DATA"
wird es funktionieren, wennDATA="-n"
(unter anderen Beispielen).Antworten:
Sie können den Befehl cut verwenden . Damit können Sie aus jeder Eingabezeile einen bestimmten Zeichen- / Byte-Bereich ausschneiden. Da der MD5-Hash eine feste Länge (32 Zeichen) hat, können Sie die Option verwenden
-c 1-32
, um nur die ersten 32 Zeichen der Eingabezeile beizubehalten:Alternativ können Sie festlegen
cut
, dass die Zeile bei jedem Leerzeichen geteilt und nur das erste Feld ausgegeben werden soll: (Beachten Sie die Anführungszeichen um das Leerzeichen)Weitere Optionen finden Sie auf der Hilfeseite zum Ausschneiden .
quelle
-d
+-f
damitmd5sum
kann ersetzt werdensha1sum
später oder was auch immer.awk
funktioniert auch:echo -n test | md5sum | awk -F" " '{print $1}'
oderawk -F" " '{print $1}' <(echo -n test | md5sum)
-F" "
Option toawk
ist sehr seltsam anzusehen , da dies die Standardeinstellung für istawk
.Sie können
cut
es:Hier
-d' '
wählt Raum als Trennzeichen, und-f1
fragt nach dem ersten Feld (vor einem Begrenzungszeichen).quelle
Mit awk arbeitet zu fein:
Ein anderer Weg ist das Erstellen einer Teilzeichenfolge. Da Sie wissen, dass md5-Hash eine Zeichenfolge mit 32 Zeichen ist, können Sie Folgendes verwenden:
Es sind nur Saitenmanipulationen, Sie haben also die Wahl!
quelle