Что означает восклицательный знак при разностном выходе?

У меня есть задание для школы. Одна из них – проверить файл на наличие изменений и записать эти изменения в файл журнала. До сих пор я нашел команду diff которая могла бы быть полезной, на мой взгляд. Предположим, у меня есть два файла с таким контентом:

file1

 orange apple 

file2

 orange apple strawberry 

Если в этом случае я использую diff -c file1 file2 , вывод команды будет

 *** file1 2016-11-24 08:31:19.424712242 +0100 --- file2 2016-11-24 08:25:24.604681751 +0100 *************** *** 1,2 **** --- 1,3 ---- orange apple + strawberry 

который, я думаю, говорит, что строка с знаком «+» должна быть добавлена ​​в файл1, чтобы они были одинаковыми (?).

Предположим, я изменил файл1 на это:

 orange apple peach 

Вывод diff -c file1 file2 :

 *** file1 2016-11-24 08:34:50.647128312 +0100 --- file2 2016-11-24 08:25:24.604681751 +0100 *************** *** 1,3 **** orange apple ! peach --- 1,3 ---- orange apple ! strawberry 

И здесь я потерян, потому что я не понимаю, что означают эти восклицательные знаки. Внезапно команда diff кажется не очень полезной. Я пробовал посмотреть man-страницу команды diff, но ничего не могу найти (может быть, я ее просто не вижу).

3 Solutions collect form web for “Что означает восклицательный знак при разностном выходе?”

  • diff -u

может быть то, что вам нужно для вашего задания.

Чтобы взять ваш пример и использовать diff -u

 michael@x071:[/home/michael]diff -u file? --- file1 2016-11-24 07:48:41 +0000 +++ file2 2016-11-24 07:48:57 +0000 @@ -1,3 +1,3 @@ orange apple -peach +strawberry 

Я надеюсь, что это поможет с вашим назначением

Слово совета – RTM – или – Прочтите Руководство. Часто есть другие варианты. FYI: исторические возможности diff (и diff3 при сравнении трех файлов) помогли создать «inout» программы, которая изменит файл1 на file2 (или файл2 обратно в файл1). Это стало основой всего программного обеспечения «контроля версий».

Параметры diff, о которых я помню давно:

  • -e: Производит вывод в форме, подходящей для использования с редактором ed для преобразования File1 в File2.
  • -f: Производит вывод в форме, не подходящей для использования с редактором ed, показывая изменения, необходимые для преобразования File1 в File2 в обратном порядке, созданного под флагом -e.
  • -n: Производит вывод, аналогичный выходному сигналу -e, но в обратном порядке и с количеством измененных строк для каждой команды вставки или удаления. Это форма, используемая системой контроля версий (RCS).

Последний вариант, который я выделил, – это «новый» – относительно говорящий. (также несколько лет, но часто не в реализациях POSIX). Вместо создания вывода, подходящего для 'ed' 'RCS', это подходит для 'patch'

  • -u: Производит сравнение команды diff с тремя строками унифицированного контекста. Результат аналогичен выходному сигналу -c, за исключением того, что строки контекста не повторяются; вместо этого контекстные, удаленные и добавленные строки показаны вместе, чередуются.

IMHO: ключевое значение diff-c является улучшением по сравнению с командой cmp – когда вы хотите узнать больше, чем ТОЛЬКО, если два файла отличаются друг от друга или нет. Я никогда не обращал внимания (возможно, это тоже «новый» вариант), но подумайте об этом, когда мой вопрос будет рекурсивным поиском файлов, которые отличаются между двумя деревьями каталогов.

Выходной сигнал diff формируется из кусков, каждый блок, соответствующий набору изменений. Линия *************** знаменует начало такого куска.

Каждый фрагмент дает вам контекст в файлах. *** 1,3 **** означает, что в первом файле следуют строки с 1 по 3, а --- 1,3 ---- означает, что в следующем файле следуют строки с 1 по 3.

Знак минус - в первом столбце обозначены строки, которые были удалены, а знак плюс + помещает строки, которые были добавлены. Восклицательный знак отмечает линии, которые изменились.

Если ваш случай, peach в первом файле был изменен на strawberry во втором.

На ваш вопрос отвечает в Info-файле diff, узел Detailed Context :

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

  • !

    Строка, которая является частью группы из одной или нескольких строк, которая изменилась между двумя файлами. Существует соответствующая группа строк, отмеченных знаком ! в части этого куска для другого файла.

  • +

    «Введенная» строка во втором файле, которая ничего не соответствует первому файлу.

  • -

    «Удаленная» строка в первом файле, которая ничего не соответствует во втором файле.

В файле Info есть много информации о форматах вывода, включая строки заголовков. Я рекомендую вам прочитать его снова.

  • Diff статистики каталогов sumarry (git diff --stat, как для non-git repo)
  • Файлы Diff 2 игнорируют строки между @ и [
  • Diff head файлов
  • Что такое -u diff действительно делает?
  • Что означает тире «-» в командной строке Unix?
  • Оценить различия между двумя файлами
  • Игнорировать все, кроме текста, при сравнении файлов с diff?
  • diff -horizon-lines = строки объяснены
  • Diff: сравнивать только если файл существует, а не содержимое
  • Как я могу использовать diff или любую другую команду для сравнения двух текстовых файлов
  • Сравните файлы и расскажите, насколько они похожи
  • Interesting Posts

    Обновление apt-get не будет обновляться – отменить / apt-add-repository

    Как скопировать файл из удаленной сети на локальный рабочий стол

    Запустить сценарий, когда пользователь выйдет из системы

    Как я могу скопировать и проверить файл, как я делаю копию?

    Grep: Найти все возможные случаи слова в текстовом файле

    Использовать разные версии программы в разных каталогах

    Мышь не работает правильно

    Файловые системы, отличные от UDF и ISO9660, на компакт-дисках, DVD-дисках и Blu-ray

    Перезапустите процесс, когда я получу stderr из другого процесса

    tmux, как связать ключ для входа в режим VI и искать назад?

    Разница между Gnome3 и Gnome-shell

    Как предотвратить fs unmounting?

    Используйте gzip для сжатия файлов в каталоге, кроме уже существующих .gz-файлов

    Как я могу узнать, какую версию apache я запускаю?

    Как запустить программу на экране, перенаправить весь вывод в файл и отсоединить

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