2012-04-25 1 views
6

Я использую команду diff для сравнения двух текстовых файлов. Они должны быть буквально согласованы.Diff-команда: не печатает строки, которые отличаются друг от друга, но все еще говорят, что два файла отличаются друг от друга.

Так я использую диф:

diff binary.out binary.expected

(.. Кстати, эти файлы не двоичные файлы Они текстовый файл, который я называю их двоичным, потому что это название проекта)

и получил

Binary files binary.out and binary.expected differ

Когда я использую другой инструмент сравнения, самый умный из всех (AKA гул а), и между этими двумя файлами нет ничего другого.

Кто-нибудь знает, что здесь происходит?

Спасибо.

+0

'diff' имеет узкое понятие« текст ». У вас могут быть специальные символы, которые на самом деле не такие специальные: акценты, возврат каретки. – geekosaur

+0

Я не думаю, что у моих текстовых файлов есть специальные символы. Все, что они содержат, это слово «BINARY SUM», цифры «0» и «1» и несколько символов новой строки. Но даже в этом случае это не объясняет, в то время как diff рассмотрел мои файлы двоичных файлов. –

+0

Если в конце каждой строки вашего файла нет последовательности LF/CR (строка/возврат каретки), то в большинстве текстовых редакторов Windows будут обрабатывать эти файлы как двоичные файлы. Эти символы невидимы, если вы просматриваете текст в текстовом режиме, но пытаетесь просмотреть файлы в двоичном режиме, и вы должны увидеть 0xD 0xA в конце каждой строки. – Flot2011

ответ

2

Обязательно игнорируйте пробел в параметрах diff.

Он также может видеть символы Юникода и интерпретировать его как двоичный. Посмотрите, есть ли у вашего инструмента diff возможность принудительного текстового режима.

5

diffdiffutils из так говорит о тексте/двоичный:

diff определяет, является ли файл текстовым или двоичным, проверяя первые несколько байт в файле; точное количество байтов зависит от системы , но обычно это несколько тысяч. Если каждый байт в , что часть файла не равна нулю, diff считает файл текстом; в противном случае он считает файл двоичным.

поэтому GNU Diff имеет довольно открытое определение того, что текст, и использование опции --text, чтобы заставить его лечить файл как текст редко должно быть необходим.

Вы проверили, есть ли binary.out или binary.expected содержит пустые символы? Какая версия - ваша программа diff?