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

AFAIK, полностью включающий epel repo (комментарий: includepkgs=nss-mdns вино* gparted PDF чашек), решает проблему.

28
13.04.2017, 15:36
4 ответа

Чтобы понять отчет, помните, что diff является предписывающим, описывая, какие изменения необходимо внести в первый файл ( file1 ), чтобы сделать его таким же, как второй файл ( файл2 ).

В частности, d в 1d0 означает удалить , а a в 2a2 означает добавить .

Таким образом:

  • 1d0 означает, что строка 1 должна быть удалена в file1 ( apples ). 0 в 1d0 означает, что строка 0 - это то место, где они появились бы во втором файле ( file2 ), если бы они не были удалены. Это означает, что при изменении file2 на file1 (назад) добавьте строку 1 из file1 после строки 0 из file2 .
  • 2a2 означает добавление второй строки ( апельсинов ) из file2 во вторую строку file1 (после удаления первой строки в файл1 , апельсины переключены на строку 1)
27
27.01.2020, 19:39

Вот они:

$ diff file1 file2
1d0
< apples
2a2
> apples
$ diff file2 file1
1d0
< oranges
2a2
> oranges
8
27.01.2020, 19:39
[

]Стандартный (старый) формат вывода будет отображать разницу между файлами без окружающего текста с областями, где файлы отличаются.[

] [

]Например: []1d0 <[] (удалить) означает, что []яблоки[] необходимо удалить из 1-й строки []файла1[], а []2a2 >[] (добавить) означает, что []яблоки[] необходимо добавить в []файл2[] во 2-й строке, таким образом, оба файла могут быть сопоставлены. [

] [

]Документация, доступная в []info diff[], объясняет это подробнее:[

] [
] [

][]Showing Differences Without Context[][

] [

]The "normal" []diff[] output format shows every hunk of differences without any around context. Иногда такой вывод является наиболее ясным способом увидеть, как изменились строки, без беспорядка соседних неизмененных строк (хотя вы можете получить аналогичные результаты при использовании контекста или унифицированных форматов, используя 0 строк контекста). Однако, этот формат больше не широко используется для рассылки заплаток; для этого формат контекста и унифицированный формат превосходят друг друга. Обычный формат - это формат по умолчанию для совместимости со старыми версиями []diff[] и стандартом POSIX. Используйте опцию []--нормальный[] для явного выбора этого выходного формата.[

] [

][]Подробное описание нормального формата[][

] [

]Нормальный выходной формат состоит из одного или более hunks из Различия; каждый хак показывает одну область, где файлы отличаются. Нормальный хакеры формата выглядят следующим образом:[

] [
][] ИЗМЕНЕНИЕ-СКОММАНД
 <ИЗ-ФАЙЛОВОЙ СТРОКИ
 <ИЗ-ФАЙЛОВОЙ СТРОКИ...
 ---
 > ЛИНИЯ ПО ФИЛЬКЛЮ
 > СТРОКА-ФАЙЛ...
[][
] [

] Существует три типа команд изменения. Каждый из них состоит из строки количество или диапазон строк, разделенных запятыми, в первом файле, одна строка символ, указывающий на вид изменения, и номер строки или разделенный запятыми диапазон строк во втором файле. Все номера строк это исходные номера строк в каждом файле. Типы изменений commands are:[

] [

][]LaR[] Добавьте строки в диапазоне R второго файла после L строки первый файл. Например, []8a12,15 [] означает добавление строк 12-15 из файл 2 после строки 8 файла 1; или, при замене файла 2 на файл 1, удалить строки 12-15 файла 2.[

] [

][]FcT[] Заменить строки в диапазоне F первого файла на строки в диапазоне Т второго файла. Это похоже на комбинированное добавление и удаление, но более компактный. Например, []5,7c8,10 [] означает смену строк 5-7 из файл 1 читается как строки 8-10 файла 2; или, если файл 2 изменяется на файл 1, изменить строки 8-10 файла 2, чтобы читать как строки 5-7 файла 1[

] [

][]RdL[]. Удалить строки в диапазоне R из первого файла; строка L - где они бы появились во втором файле, если бы не были удалён. Например, []5,7d3[] означает удаление строк 5-7 файла 1; или, при замене файла 2 на файл 1, добавить строки 5-7 файла 1 после строки 3 файла 2.[

] [
] [

]См. также:[

] [] [
] [

]So to see the orange, you would have have to diff it either side by side or using unified context.[

] [

]In example:[

] [
$ diff -y file1 file2
apples                                <
oranges                             oranges
                                  > apples

$ diff -u file1 file2
@@ -1,2 +1,2 @@
-apples
 oranges
+apples
]
8
27.01.2020, 19:39

Рассмотрим эти файлы:

file1:

# cat file1
apples
pears
oranges
peaches

file2:

# cat file2
oranges
apples
peaches
ananas
banana

Как работает diff, учитывая его упорядоченность:

  1. diff читает первый блок строк file1 и file2 и пытается найти равные строки:

     file1 file2 различия слева (<) или справа (>)
     яблоки <яблоки
     груши <груши 
     -------------------------------
    -> апельсины -> апельсины
     персиковые яблоки
     персики
     ананас
     банан
    
  2. Теперь он пропустит все строки, которые одинаковы в обоих файлах, а это просто апельсины в данном случае:

     file1 file2 различия слева (<) или справа (>)
     яблоки <яблоки
     груши <груши 
     апельсины
     -------------------------------
    -> перья -> яблоки
     персики
     ананас
     банан
    
  3. Теперь найдите другой набор похожих строк и распечатайте различия:

     file1 file2 различия слева (<) или справа (>).
     яблоки <яблоки
     груши <груши 
     апельсины
     яблоки > яблоки
     -------------------------------
    -> персики -> персики
     ананас
     банан
    
  4. Пропустить похожие строки

     file1 file2 различия слева (<) или справа (>)
     яблоки <яблоки
     груши <груши 
     апельсины
     яблоки > яблоки
     персики
     -------------------------------
    -> ->ананы
     банан
    
  5. По возможности найдите идентичные строки и выведите различия:

    line_file1 file1 line_file2 file2 различия слева (<) или справа (>).
     1 яблоко <яблоки 
     2 груши 
     3 апельсина 1 апельсин
     2 яблока > яблоки
     4 персика 3 персика
     4 ананас > ананас
     5 банан > банан
     -----------------------------------------------
    

Теперь, если я сделаю diff file1 file2:

# diff file1 file2
1,2d0
< apples
< pears
3a2
> apples
4a4,5
> ananas
> banana

Теперь просто объяснить, что означает вывод diff:

Сделать file1 равным file2:

  • 1,2d0: Удалить (d) строки 1-2 из файла1 и изменить строку 0 из файла2 соответственно
  • 3a2: добавить (a) к строке 3 из файла1 строки 2 из файла2
  • 4a4,5: добавить к строке 4 из файла1 строк 4-5 из файла2

diff сравнивает файл1 с файлом2 строка за строкой и устраняет разницу во временной памяти. После того, как file1 равен file2 до первого появления строки в file1, что также происходит в file2, все строки, которые равны до разницы, не упоминаются, часто обозначаются как ---. В данном случае существует только одна похожая строка - ---. Обратите внимание, что я сказал -файл1, равный -файлу2, поэтому -файл1 рассматривается относительно -файла2, а не наоборот.

выводится относительно первого заданного файла, в данном случае файла1.

13
27.01.2020, 19:39

Теги

Похожие вопросы