问题 使用grep匹配md5哈希值


如何将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哈希。


1833
2017-12-22 02:19


起源



答案:


你要这个:

grep -e "[0-9a-f]\{32\}" filename

或者更像是,基于您的文件格式描述,这个:

grep -e ":[0-9a-f]\{32\}" filename

13
2017-12-22 02:28





好吧,考虑到你的文件的格式,第一个变体将无法工作,因为你试图匹配行的开头。

鉴于以下文件内容:

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的行。


3
2017-12-22 02:35



呃...原来的问题没有描述他正在翻阅的文件吗?我们提供的答案在新的,不那么详细的问题中并不完全有意义。 - Glenn McAllister
+1用于解释由grep导致失败匹配的原因。 - GuruM


答案:


你要这个:

grep -e "[0-9a-f]\{32\}" filename

或者更像是,基于您的文件格式描述,这个:

grep -e ":[0-9a-f]\{32\}" filename

13
2017-12-22 02:28





好吧,考虑到你的文件的格式,第一个变体将无法工作,因为你试图匹配行的开头。

鉴于以下文件内容:

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的行。


3
2017-12-22 02:35



呃...原来的问题没有描述他正在翻阅的文件吗?我们提供的答案在新的,不那么详细的问题中并不完全有意义。 - Glenn McAllister
+1用于解释由grep导致失败匹配的原因。 - GuruM


咩。

#!/bin/sh
while IFS=: read filename filesize hash
do
  if [ -z "$hash" ]
  then
    echo "$filename"
  fi
done < hashes.lst

0
2017-12-22 02:24





在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

0
2018-03-28 15:41