Szukam prostego sposobu na przekazanie wyniku md5sum
do innego polecenia. Coś takiego:
$echo -n 'test' | md5sum | ...
Mój problem polega na tym, że md5sum
generuje nie tylko skrót ciągu, ale także myślnik, który wskazuje, że dane wejściowe pochodziły ze standardowego wejścia. Sprawdziłem plik man i nie znalazłem żadnych flag kontrolujących dane wyjściowe.
bash
ubuntu
shell-script
hashsum
nmat
źródło
źródło
echo -n
gdy dane tekstowe są nieznane. Użyjprintf '%s' "$DATA"
zamiast tego. W przeciwieństwie doecho -n "$DATA"
tego będzie działać, gdyDATA="-n"
(między innymi).Odpowiedzi:
Możesz użyć polecenia cut ; pozwala wyciąć określony zakres znaków / bajtów z każdej linii wejściowej. Ponieważ skrót MD5 ma stałą długość (32 znaki), możesz użyć opcji,
-c 1-32
aby zachować tylko pierwsze 32 znaki z wiersza wprowadzania:Alternatywnie możesz powiedzieć,
cut
aby podzielić linię na każdym spacji i wypisać tylko pierwsze pole: (zwróć uwagę na cudzysłowy wokół znaku spacji)Więcej informacji znajdziesz na stronie cięcia .
źródło
-d
+-f
, abymd5sum
można go było zastąpićsha1sum
dowolnym innym.awk
działa również:echo -n test | md5sum | awk -F" " '{print $1}'
lubawk -F" " '{print $1}' <(echo -n test | md5sum)
-F" "
opcjaawk
jest bardzo dziwna, biorąc pod uwagę, że jest ona domyślna dlaawk
.Możesz
cut
to:Tutaj
-d' '
wybiera spację jako separator i-f1
prosi o pierwsze pole (przed separatorem).źródło
Korzystanie z awk również działa dobrze:
Innym sposobem jest utworzenie podłańcucha. Ponieważ wiesz, że skrót md5 jest ciągiem zawierającym 32 znaki, możesz użyć:
To tylko manipulacje sznurkiem, więc masz wybór!
źródło