Как передать md5 хэш результат в оболочку


12

Я ищу простой способ передать результат md5sumв другую команду. Что-то вроде этого:

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

Моя проблема заключается в том, что md5sumвыводит не только хэш строки, но также и перенос, который указывает на то, что ввод поступил из стандартного ввода. Я проверил файл man и не нашел никаких флагов для контроля вывода.


4
Примечание: будьте осторожны, чтобы не использовать, echo -nкогда текстовые данные неизвестны. Используйте printf '%s' "$DATA"вместо этого. В отличие от этого echo -n "$DATA", он будет работать, когда DATA="-n"(среди других примеров).
Стефан Гименес

Ответы:


14

Вы можете использовать команду вырезать ; это позволяет вам вырезать определенный диапазон символов / байтов из каждой строки ввода. Поскольку хэш MD5 имеет фиксированную длину (32 символа), вы можете использовать опцию, -c 1-32чтобы сохранить только первые 32 символа из строки ввода:

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

В качестве альтернативы вы можете указать cutразделить строку в каждом пробеле и вывести только первое поле: (обратите внимание на кавычки вокруг символа пробела)

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

Смотрите раздел man для дополнительной информации.


Я тоже об этом думал! Я выбрал -d+, -fчтобы его md5sumможно было заменить на sha1sumили как угодно позже.
Стефан Гименес

awkтоже работает: echo -n test | md5sum | awk -F" " '{print $1}' илиawk -F" " '{print $1}' <(echo -n test | md5sum)
laebshade

Спасибо за ответ. @laebshade На самом деле, вы должны использовать printf, иначе он будет выводить символ новой строки в конце;)
nmat

@laebshade: -F" "опция awkочень странная, учитывая, что она используется по умолчанию awk.
энзотиб

3

Вы можете cutэто:

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

Здесь -d' 'выбирает пробел в качестве разделителя и -f1запрашивает первое поле (перед разделителем).


2

Использование awk тоже отлично работает:

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

Другой способ сделать подстроку. Поскольку вы знаете, что md5-хеш - это строка из 32 символов, вы можете использовать:

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

Это просто струнные манипуляции, так что у вас есть выбор!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.