Разница сообщает разницу, но обе строки одинаковы
Я отправил 2 файла и получил
1c1
< 1
---
> 1
Оба файла содержали только "1". Чем это отличается?
5 ответов
1-я строка: a
обозначает добавлено, d
для удаленных и c
для изменилось. Номера строк исходного файла появляются перед этими буквами, а номера измененного файла - после буквы.
2-я строка: строка с <
взяты из файла 1 и отличаются от файла 2.
3-я строка - это разделитель.
4-я строка: строка с >
взяты из файла 2 и отличаются от файла 1.
(Если вы когда-нибудь увидели =
это означает, что строки одинаковы в обоих файлах)
И вашей проблемой могут быть пробелы или другие нечитаемые человеком символы: они тоже вызывают разницу.
Есть несколько вариантов манипулирования выводом.
Пример:
rinzwind @ discworld: ~ $ больше 1 тестовое задание test2 test3 rinzwind@discworld:~$ больше 2 тестовое задание test2 test3
контекстный формат:
rinzwind @ discworld: ~ $ diff -c 1 2 *** 1 2011-08-13 17: 05: 40.433966684 +0200 --- 2 2011-08-13 17: 11: 24.369966629 +0200 *************** *** 1,3 **** тестовое задание! test2 test3 --- 1,3 ---- тестовое задание! test2 test3
"!" представляет изменение между строками, которые соответствуют в двух файлах. "+" Представляет добавление строки, в то время как пробел представляет неизменную строку. В начале патча находится информация о файле, включая полный путь и отметку времени. В начале каждого блока находятся номера строк, которые применяются для соответствующего изменения в файлах. Диапазон номеров, появляющийся между наборами из трех звездочек, применяется к исходному файлу, в то время как наборы из трех черточек применяются к новому файлу. Диапазоны блоков указывают номера начальной и конечной строк в соответствующем файле.
Расширение комментария Лекенштейна об унифицированном формате:
rinzwind @ discworld: ~ $ diff -u 1 2 --- 1 2011-08-13 17: 05: 40.433966684 +0200 +++ 2 2011-08-13 17: 11: 24.369966629 +0200 @@ -1,3 +1,3 @@ тестовое задание -test2 +test2 test3
Формат начинается с того же двухстрочного заголовка, что и контекстный формат, за исключением того, что исходному файлу предшествует "---", а новому файлу предшествует "+++". Далее следует один или несколько блоков изменений, которые содержат различия строк в файле. Неизменным контекстным строкам предшествует пробел, строкам добавления предшествует знак плюс, а линиям удаления предшествует знак минус.
Несколько полезных опций:
-b
Игнорировать изменения количества пустого пространства.
-w
Игнорировать все пустое пространство.
-B
Игнорировать все пустые строки.
-y
вывод в 2 столбца.
Я считаю, что od (восьмеричный дамп) удобен при сравнении файлов с непечатаемыми символами (в частности, файлы, которые diff определяет как "двоичные" и, таким образом, говорят только о том, что они различаются).
В приведенном ниже примере я создаю пару файлов, которые могут быть похожи на исходные, а затем выполняю diff с исходным выводом; затем я делаю diff на пару разных "од" выходов.
$ echo 1> 1
$ echo "1"> 2
$ diff 1 2
1c1
< 1
- ---
> 1
$ od -c 1> 1.od
$ od -c 2> 2.od
$ diff 1.od 2.od
1,2c1,2
< 0000000 1 \n
< 0000002
---
> 0000000 1 \n
> 0000003
$ od -Ax -c -t x1 1> 1.od
$ od -Ax -c -t x1 2> 2.od
$ diff 1.od 2.od
1,3c1,3
< 000000 1 \n
< 31 0a
< 000002
---
> 000000 1 \n
> 31 20 0a
> 000003
У меня была та же проблема, и я нашел решение, которое может помочь, используйте команду:
dos2unix
<file1> <file2>
один из них может быть в формате DOS / Windows, а другой формат UNIX
после того, как я сделал это, различия были все хорошо!
Очень вероятно, что в одной из строк прячется непечатаемый персонаж. Просто направьте вывод вcat -t
для отображения любых непечатаемых символов:
diff file1 file2 | cat -t
Не уверен, поможет ли это трудно найти пробельные символы, но это удобно для сравнения: http://www.gnu.org/software/wdiff/
http://www.gnu.org/software/diffutils/manual/html_node/Detailed-Unified.html
Выше ссылка обеспечивает более краткое и четкое описание.