Я ищу простой способ передать результат md5sum
в другую команду. Что-то вроде этого:
$echo -n 'test' | md5sum | ...
Моя проблема заключается в том, что md5sum
выводит не только хэш строки, но также и перенос, который указывает на то, что ввод поступил из стандартного ввода. Я проверил файл man и не нашел никаких флагов для контроля вывода.
echo -n
когда текстовые данные неизвестны. Используйтеprintf '%s' "$DATA"
вместо этого. В отличие от этогоecho -n "$DATA"
, он будет работать, когдаDATA="-n"
(среди других примеров).Ответы:
Вы можете использовать команду вырезать ; это позволяет вам вырезать определенный диапазон символов / байтов из каждой строки ввода. Поскольку хэш MD5 имеет фиксированную длину (32 символа), вы можете использовать опцию,
-c 1-32
чтобы сохранить только первые 32 символа из строки ввода:В качестве альтернативы вы можете указать
cut
разделить строку в каждом пробеле и вывести только первое поле: (обратите внимание на кавычки вокруг символа пробела)Смотрите раздел man для дополнительной информации.
источник
-d
+,-f
чтобы егоmd5sum
можно было заменить наsha1sum
или как угодно позже.awk
тоже работает:echo -n test | md5sum | awk -F" " '{print $1}'
илиawk -F" " '{print $1}' <(echo -n test | md5sum)
-F" "
опцияawk
очень странная, учитывая, что она используется по умолчаниюawk
.Вы можете
cut
это:Здесь
-d' '
выбирает пробел в качестве разделителя и-f1
запрашивает первое поле (перед разделителем).источник
Использование awk тоже отлично работает:
Другой способ сделать подстроку. Поскольку вы знаете, что md5-хеш - это строка из 32 символов, вы можете использовать:
Это просто струнные манипуляции, так что у вас есть выбор!
источник