Jak potokować potok MD5 w powłoce


12

Szukam prostego sposobu na przekazanie wyniku md5sumdo innego polecenia. Coś takiego:

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

Mój problem polega na tym, że md5sumgeneruje 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.


4
Uwaga: należy zachować ostrożność, aby nie używać, echo -ngdy dane tekstowe są nieznane. Użyj printf '%s' "$DATA"zamiast tego. W przeciwieństwie do echo -n "$DATA"tego będzie działać, gdy DATA="-n"(między innymi).
Stéphane Gimenez

Odpowiedzi:


14

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-32aby zachować tylko pierwsze 32 znaki z wiersza wprowadzania:

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

Alternatywnie możesz powiedzieć, cutaby podzielić linię na każdym spacji i wypisać tylko pierwsze pole: (zwróć uwagę na cudzysłowy wokół znaku spacji)

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

Więcej informacji znajdziesz na stronie cięcia .


Też o tym myślałem! Wybrałem -d+ -f, aby md5summożna go było zastąpić sha1sumdowolnym innym.
Stéphane Gimenez

awkdziała również: echo -n test | md5sum | awk -F" " '{print $1}' lubawk -F" " '{print $1}' <(echo -n test | md5sum)
laebshade

Dziękuję za Twoją odpowiedź. @laebshade Właściwie musisz użyć printf, w przeciwnym razie na końcu pojawi się nowy znak wiersza;)
nmat

@laebshade: -F" "opcja awkjest bardzo dziwna, biorąc pod uwagę, że jest ona domyślna dla awk.
enzotib

3

Możesz cutto:

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

Tutaj -d' 'wybiera spację jako separator i -f1prosi o pierwsze pole (przed separatorem).


2

Korzystanie z awk również działa dobrze:

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

Innym sposobem jest utworzenie podłańcucha. Ponieważ wiesz, że skrót md5 jest ciągiem zawierającym 32 znaki, możesz użyć:

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

To tylko manipulacje sznurkiem, więc masz wybór!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.