Понимание выходного сигнала

У меня есть file1.txt

 this is the original text line2 line3 line4 happy hacking ! 

и file2.txt

 this is the original text line2 line4 happy hacking ! GNU is not UNIX 

если я это сделаю: diff file1.txt file2.txt :

 3d2 < line3 5a5 > GNU is not UNIX 

Как вывод обычно интерпретируется? Я думаю, что < означает удаление, но что 3d2 или 5a5 ?

Если я сделаю:

 $ diff -u file1.txt file2.txt --- file1.txt 2013-07-06 17:44:59.180000000 +0200 +++ file2.txt 2013-07-06 17:39:53.433000000 +0200 @@ -1,5 +1,5 @@ this is the original text line2 -line3 line4 happy hacking ! +GNU is not UNIX 

Результаты более четкие, но что означает @@ -1,5 +1,5 @@ ?

3 Solutions collect form web for “Понимание выходного сигнала”

В вашем первом выпуске diff (так называемый «normall diff») значение имеет следующий вид

< – обозначает строки в файле file1.txt

> – обозначает строки в файле2.txt

3d2 и 5a5 обозначают затронутые номера строк и какие действия были выполнены. d означает удаление, a означает добавление (и c означает изменение). число слева от символа – номер строки в файле file1.txt, номер справа – номер строки в файле2.txt. Итак, 3d2 сообщает вам, что 3-я строка в файле file1.txt была удалена и имеет номер строки 2 в файле file2.txt (или лучше сказать, что после удаления счетчик строк вернулся к строке номер 2). 5a5 сообщает, что мы начали с строки 5 в файле file1.txt (который был фактически пуст после удаления строки в предыдущем действии), добавила строку, и эта добавленная строка – номер 5 в файле2.txt.

Вывод команды diff -u форматируется немного по-другому (так называемый формат «унифицированный diff»). Здесь diff показывает нам один фрагмент текста вместо двух отдельных текстов. В строке @@ -1,5 +1,5 @@ часть -1,5 относится к file1.txt и части +1,5 к файлу file2.txt. Они говорят нам, что diff покажет фрагмент текста, который длится 5 строк, начиная с строки 1 в файле file1.txt. То же самое касается файла file2.txt – diff показывает нам 5 строк, начиная с строки 1.

Как я уже сказал, строки из обоих файлов показаны вместе

  this is the original text line2 -line3 line4 happy hacking ! +GNU is not UNIX 

Здесь - обозначает строки, которые были удалены из файла file1.txt, и + обозначает строки, которые были добавлены.

Резюме :

Учитывая diff file1 file2 , < означает, что строка отсутствует в file2 и > означает, что строка отсутствует в file1 . 3d2 и 5a5 можно игнорировать, это команды для patch которые часто используются с diff .

Полный ответ :

Многие утилиты nix предлагают руководства TeXinfo, а также более простые справочные страницы. вы можете получить к ним доступ, выполнив info command , например info diff . В этом случае раздел, который вас интересует:

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


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

  CHANGE-COMMAND < FROM-FILE-LINE < FROM-FILE-LINE... --- > TO-FILE-LINE > TO-FILE-LINE... 

Существует три типа команд изменения. Каждый из них состоит из номера строки или разделенного запятыми диапазона строк в первом файле, одного символа, указывающего вид изменения, который должен быть сделан, и номера строки или диапазона строк, разделенных запятыми, во втором файле. Все номера строк являются исходными номерами строк в каждом файле. Типы команд изменения:

 `LaR' Add the lines in range R of the second file after line L of the first file. For example, `8a12,15' means append lines 12-15 of file 2 after line 8 of file 1; or, if changing file 2 into file 1, delete lines 12-15 of file 2. `FcT' Replace the lines in range F of the first file with lines in range T of the second file. This is like a combined add and delete, but more compact. For example, `5,7c8,10' means change lines 5-7 of file 1 to read as lines 8-10 of file 2; or, if changing file 2 into file 1, change lines 8-10 of file 2 to read as lines 5-7 of file 1. `RdL' Delete the lines in range R from the first file; line L is where they would have appeared in the second file had they not been 

Всегда делайте diff -rupP file1.txt file2.txt> result.patch Когда вы увидите vi result.patch , вы знаете, в чем разница.

Только diff затрудняет понимание.

r : рекурсивно

u : показывает номер строки

p (малый): показывает разницу в функции C

P (capital): если несколько файлов, показывающих полный путь

  • Инструмент в unix для вычитания текстовых файлов?
  • git diff копий, которые добавили только строки
  • Какие оптимизированные инструменты доступны для сравнения содержимого каталога?
  • Сравните два журнала по строкам и покажите различия, и если порядок слов из строки не совпадает
  • Diff не работает, как я ожидаю
  • Цветной вывод команды linux похож на «watch -d», чтобы выделить различия?
  • diff --git неизвестный вариант
  • Почему diff вызывается при вызове из Makefile?
  • перечислить самый старый файл в каталогах в цикле
  • Как сравнить файл с гибким изображением и фактическим содержимым флоппи?
  • Применение патча diff
  • слияние, которое работает с детализацией слов вместо строки
  • Interesting Posts

    автоматические процессы убийства

    Устранение неполадок подключения к Интернету

    Как установить библиотеку pylzma python в Linux?

    найти файлы с двумя типами расширений, измененными более 30 дней назад

    AWK: получить случайные строки файла, удовлетворяющие условию?

    Отображение сообщений в tty с использованием whiptail через monit

    Как написать правило, которое имеет пограничный сервер, пересылает запрос клиентов на внутренний сетевой сервер и обратно?

    Выравнивание при печати серии записей

    Как изменить название терминала без изменения строки приглашения?

    Как я могу перетасовать страницы из pdf-файла в случайном порядке?

    после замены материнской платы Debian получает пустой экран во время загрузки

    Использование чернослива не работает в команде find

    Установка из источника – мне нужно сохранить извлеченный каталог tarball

    требует ли второе ядро ​​kexec

    параметр таймаута чтения (-t) не работает?

    Linux и Unix - лучшая ОС в мире.