Что означает восклицательный знак в выводе diff?

Блог Герхарда Гаппмайера - Как рекурсивно заменить файл заголовки исходных файлов

К сообщению в блоге прилагается файл tar.gz , содержащий необходимые файлы.

Он имеет файл header.template , в котором вы можете написать собственный комментарий, он может занимать несколько строк.

Он имеет сценарий remove_header.awk , который заменяет существующие заголовки новым заголовком.

Чтобы запустить его:

find . -name "*.h" -exec ~/rh/replace_header.sh {} \;

7
24.11.2016, 20:00
3 ответа
  • 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 - или - Прочтите Руководство. Часто есть и другие варианты. К вашему сведению: исторические параметры diff (и diff3 при сравнении трех файлов) должны были помочь в создании «программы inout», которая изменила бы file1 на file2 (или file2 обратно на file1). Это было основой всего программного обеспечения "контроля версий".

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

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

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

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

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

10
27.01.2020, 20:14

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

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

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

В вашем случае персик в первом файле был заменен на клубнику во втором.

5
27.01.2020, 20:14

Ответ на ваш вопрос Info-файл diff, узел Подробный контекст :

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

  • !

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

  • +

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

  • -

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

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

7
27.01.2020, 20:14

Теги

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