Разница между отчетами, но обе строки одинаковы

54

Я разделил 2 файла и получил

1c1
< 1
---
> 1

Оба файла содержат только «1». Как это отличается?

    
задан Jiew Meng 13.08.2011 в 17:03
источник

5 ответов

67

1-я строка: a означает добавление, d для удаленных и c для изменений. Номера строк исходного файла появляются до того, как эти буквы появятся после того, как эти буквы появятся после буквы.

Вторая строка: строка с < из файла 1 и отличается от файла 2.

Третья строка - это разделитель.

4-я строка: строка с > из файла 2 и отличается от файла 1.

(Если вы когда-либо видели = , это означает, что строки одинаковы в обоих файлах)

И ваша проблема может быть пробелами или другими нечитаемыми для человека символами: они также вызывают разницу.

Есть несколько вариантов управления выводами.

Пример:

[email protected]:~$ more 1 
test
test2
test3
[email protected]:~$ more 2
test
test2  
test3

контекстный формат:

[email protected]:~$ diff -c  1 2
*** 1   2011-08-13 17:05:40.433966684 +0200
--- 2   2011-08-13 17:11:24.369966629 +0200
***************
*** 1,3 ****
  test
! test2
  test3
--- 1,3 ----
  test
! test2  
  test3

A "!" представляет собой изменение между строками, которые соответствуют в двух файлах. «+» Представляет добавление строки, в то время как пустое пространство представляет собой неизмененную линию. В начале патча находится информация о файле, включая полный путь и отметку времени. В начале каждого столбца находятся номера строк, которые применяются для соответствующего изменения файлов. Диапазон номеров, появляющийся между наборами из трех звездочек, относится к исходному файлу, а к новому файлу применяются три символа. Диапазоны hunk определяют начальные и конечные номера строк в соответствующем файле.

Расширение комментария Лекенштейна об унифицированном формате:

[email protected]:~$ 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 @@
 test
-test2
+test2  
 test3

Формат начинается с того же двухстрочного заголовка, что и формат контекста, за исключением того, что исходному файлу предшествует «---», а новому файлу предшествует «+++». После этого есть один или несколько кусков изменений, которые содержат различия в строке в файле. Неизмененным контекстным строкам предшествует символ пробела, а строкам сложения предшествует знак «плюс», а линиям удаления предшествует знак «минус».

Некоторые полезные опции:

-b Игнорировать изменения в пробеле.

-w Игнорировать все пробелы.

-B Игнорировать все пустые строки.

-y выход в 2-х столбцах.

    
ответ дан Rinzwind 13.08.2011 в 17:13
источник
6

Я нахожу od (восьмеричный дамп) для сравнения файлов с непечатаемыми символами (в частности, файлы, которые diff решают, являются «двоичными» и, таким образом, говорят только о том, что они отличаются).

В приведенном ниже примере я создаю пару файлов, которые могут быть похожими на исходные, затем выполните разницу с исходным выходом; Затем я выполняю различие на нескольких разных выходах «od».

$ эхо 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
    
ответ дан Charles Boling 14.01.2014 в 21:36
1

У меня была та же проблема, и я нашел решение, которое могло бы помочь, используйте команду:

dos2unix <file1> <file2>

один из них может быть в формате dos / windows, а другой - в формате UNIX

после того, как я сделал это, все было хорошо!

    
ответ дан levk 03.09.2013 в 14:43
0

Не уверен, что это помогает с трудными для поиска пробельными символами, но это удобно для различения: Ссылка

    
ответ дан David Winiecki 25.10.2013 в 19:15
0

Ссылка

Выше ссылка содержит более сжатое и четкое описание.

    
ответ дан Akshar Patel 23.03.2017 в 13:36