如何在外壳中管道MD5哈希结果


12

我正在寻找一种将方法的结果传递md5sum到另一个命令的简单方法。像这样:

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

我的问题是不仅md5sum输出字符串的哈希值,而且输出连字符,这表明输入来自标准输入。我检查了man文件,但没有找到控制输出的任何标志。


4
注意:echo -n当文本数据未知时,请不要使用。使用printf '%s' "$DATA"代替。不像echo -n "$DATA",它可以DATA="-n"在其他示例中使用。
斯蒂芬·吉梅内斯

Answers:


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

谢谢你的回答。@laebshade实际上,您必须使用printf,否则它将在末尾输出换行符;)
nmat 2011年

@laebshade:看到的-F" "选项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}

这只是字符串操作,因此您可以选择!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.