O fato de que apenas o último hash é reconhecido pode apontar para um problema de final de linha em todas as linhas, exceto na última.
Eu testei isso no meu sistema (Ubuntu 14.04; grep (GNU grep) 2.16) com os seguintes arquivos:
$ cat culls.txt
h00
h10
h20
h30
h40
$ cat culls2.txt
h00
h10
h20
h30
h40
$ cat hashes.txt
h04
h11
h13
h30
h61
h40
h41
h39
h42
$ file culls.txt hashes.txt culls2.txt
culls.txt: ASCII text
hashes.txt: ASCII text
culls2.txt: ASCII text, with CRLF line terminators
A saída que recebo usando culls.txt
é a esperada ( h30
e h40
removido da saída):
$ grep -v -F -f culls.txt hashes.txt
h04
h11
h13
h61
h41
h39
h42
A saída que eu recebo usando culls2.txt
é semelhante ao que você vê (somente h40
removido da saída; h30
ainda está lá):
$ grep -v -F -f culls2.txt hashes.txt
h04
h11
h13
h30
h61
h41
h39
h42
Não há finais de linha na última linha de culls2.txt
.
Quando também adicionei um terminador de linha CRLF à última linha que obtive:
$ grep -v -F -f culls3.txt hashes.txt
h04
h11
h13
h30
h61
h40
h41
h39
h42
Agora nenhum dos hashes é retirado da saída.
Isso prova que os terminadores de linha CRLF são o problema.