Por que o sha1sum age de maneira diferente com a mesma entrada?

5

Estou tentando replicar o comportamento do executável sha1sum em algum código java, no entanto, no processo, descobri que o sha1sum parece se comportar de maneira diferente, dada a mesma entrada em dois cenários.

Suponha a entrada de '12345' sem as aspas simples e sem nova linha.

Se eu colocar esses dados em um arquivo (file1) e executar o sha1sum na linha de comando:

$ sha1sum file1
8cb2237d0679ca88db6464eac60da96345513964  file1

No entanto, se eu fizer isso, obtenho um resultado diferente:

$ cat file1 | grep -vi foo | grep -vi bar | sha1sum
2672275fe0c456fb671e4f417fb2f9892c7573ba  -

Usando o jar do commons-codec do apache, consigo ler no arquivo1, obter seu conteúdo e executar um .shahex () no conteúdo e obter o primeiro resultado. No entanto, eu preciso obter o segundo resultado (devido ao código legado) e não consigo descobrir por que o sha1sum está se comportando de maneira diferente, ou o que o grep está fazendo com a entrada.

O sistema está executando o CentOS 5.4 com sha1sum 5.97

Algum apontador?

    
por twilbrand 23.06.2010 / 00:11

3 respostas

14

grep adiciona uma nova linha.

$ hd file1
00000000  31 32 33 34 35                                    |12345|
00000005
$ grep -vi test <file1 | hd
00000000  31 32 33 34 35 0a                                 |12345.|
00000006

Para obter o mesmo resultado, você deve adicionar um único \n no final da entrada, se não estiver presente.

    
por 23.06.2010 / 00:26
8

Confirme se as seqüências são idênticas primeiro:

$ cat file1 | grep -vi foo | grep -vi bar > /tmp/junk
$ cmp file1 /tmp/junk

caso contrário, você só estará correndo atrás de você.

    
por 23.06.2010 / 01:37
1

O seu grep é alias para ter --color? Você verificou a saída do seu pipeline sem sha1sum?

    
por 23.06.2010 / 00:22