如何将md5哈希与grep命令匹配?
在php中,我过去使用过这种正则表达式:
/^[0-9a-f]{32}$/i
但我试过了:
grep '/^[0-9a-f]{32}$/i' filename
grep '[0-9a-f]{32}$/' filename
grep '[0-9a-f]{32}' filename
和其他变种,但我没有得到任何输出,我知道该文件包含md5哈希。
答案 0 :(得分:14)
你想要这个:
grep -e "[0-9a-f]\{32\}" filename
或者更像是根据您的文件格式说明:
grep -e ":[0-9a-f]\{32\}" filename
答案 1 :(得分:3)
好吧,鉴于您的文件格式,第一个变体将无效,因为您尝试匹配该行的开头。
给出以下文件内容:
a1:52:d048015ed740ae1d9e6998021e2f8c97
b2:667:1012245bb91c01fa42a24a84cf0fb8f8
c3:42:
d4:999:85478c902b2da783517ac560db4d4622
以下内容应该可以显示哪些行包含md5:
grep -E -i '[0-9a-f]{32}$' input.txt
a1:52:d048015ed740ae1d9e6998021e2f8c97
b2:667:1012245bb91c01fa42a24a84cf0fb8f8
d4:999:85478c902b2da783517ac560db4d4622
-E用于扩展正则表达式支持,-i用于忽略模式和输入文件中的小心。
如果要查找不匹配的行,请尝试
grep -E -i -v '[0-9a-f]{32}$' input.txt
-v反转匹配,因此它显示没有MD5的行。
答案 2 :(得分:0)
咩。
#!/bin/sh
while IFS=: read filename filesize hash
do
if [ -z "$hash" ]
then
echo "$filename"
fi
done < hashes.lst
答案 3 :(得分:0)
在Linux和OSX上跨平台工作的小内容,仅返回MD5哈希值(用您的文件名替换YOURFILE
):
[ "$(uname)" = "Darwin" ] && { MD5CMD=md5; } || { MD5CMD=md5sum; } \
&& { ${MD5CMD} YOURFILE | grep -o "[a-fA-F0-9]\{32\}"; }
示例:
$ touch YOURFILE
$ [ "$(uname)" = "Darwin" ] && { MD5CMD=md5; } || { MD5CMD=md5sum; } && { ${MD5CMD} YOURFILE | grep -o "[a-fA-F0-9]\{32\}"; }
d41d8cd98f00b204e9800998ecf8427e