Як труба хеш md5 призводить до оболонки


12

Я шукаю простий спосіб передати результат md5sumв іншу команду. Щось на зразок цього:

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

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


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

Відповіді:


14

Ви можете використовувати команду cut ; це дозволяє вирізати певний діапазон символів / байтів з кожного рядка введення. Оскільки хеш MD5 має фіксовану довжину (32 символи), ви можете використовувати опцію, -c 1-32щоб зберегти лише перші 32 символи з рядка введення:

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

Крім того, ви можете сказати cutрозділити рядок на кожен пробіл і вивести лише перше поле: (зверніть увагу на лапки навколо символу пробілу)

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

Щоб дізнатися більше, перегляньте розрізану сторінку зрізаних матеріалів .


Я про це теж думав! Я вибрав -d+, -fщоб пізніше md5sumможна було замінити його sha1sumчи іншим.
Стефан Гіменез

awkпрацює теж: echo -n test | md5sum | awk -F" " '{print $1}' абоawk -F" " '{print $1}' <(echo -n test | md5sum)
маяк

Дякую за відповідь. @laebshade Насправді, ви повинні використовувати printf, інакше він виведе новий символ рядка в кінці;)
nmat

@laebshade: -F" "параметр to awkдуже дивно бачити, враховуючи, що він є типовим для awk.
enzotib

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.