Что ж, учитывая формат вашего файла, первый вариант не будет работать, потому что вы пытаетесь сопоставить начало строки.
Учитывая следующее содержимое файла:
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.