5

Я пытаюсь повторить поведение исполняемого файла sha1sum в некотором Java-коде, однако в процессе, который я обнаружил, sha1sum, похоже, ведет себя по-разному при одинаковом вводе в двух сценариях.

Предположим, что введен «12345» без одинарных кавычек и без новой строки.

Если я помещаю эти данные в файл (file1) и запускаю sha1sum из командной строки:

$ sha1sum file1
8cb2237d0679ca88db6464eac60da96345513964  file1

Однако, если я сделаю это, я получу другой результат:

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

Используя jar-файл apache commons-codec, я могу прочитать в file1, получить его содержимое, выполнить .shahex() для содержимого и получить первый результат. Тем не менее, мне нужно получить второй результат (из-за устаревшего кода), и я не могу понять, почему sha1sum ведет себя по-разному, или что grep делает с вводом.

Система работает под управлением CentOS 5.4 с sha1sum 5.97

Есть указатели?

3 ответа3

14

grep добавляет новую строку.

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

Чтобы получить тот же результат, вы должны добавить один \n в конце ввода, если его нет.

8

Убедитесь, что последовательности идентичны, сначала:

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

в противном случае вы просто будете преследовать свой хвост.

1

Ваш grep имеет псевдоним? --Color? Вы проверили вывод вашего конвейера без sha1sum в нем?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .