<Предыдущая | Содержание: | Следующая>
Разница
Как и Прдч программа, Разница используется для обнаружения различий между файлами. Тем не мение, Разница - это гораздо более сложный инструмент, поддерживающий множество форматов вывода и способный одновременно обрабатывать большие коллекции текстовых файлов. Разница часто используется разработчиками программного обеспечения для изучения изменений между различными версиями исходного кода программы и, таким образом, имеет возможность рекурсивно проверять каталоги исходного кода, часто называемые исходные деревья. Одно обычное использование для Разница это создание файлы diff or патчи которые используются такими программами, как заплата (который мы вскоре обсудим), чтобы преобразовать одну версию файла (или файлов) в другую версию.
Если мы используем Разница чтобы посмотреть на наши предыдущие файлы примеров:
[я @ linuxbox ~] $ файл различий1.txt файл2.txt
1d0
<a 4a4
> и
[я @ linuxbox ~] $ файл различий1.txt файл2.txt
1d0
<a 4a4
> и
мы видим его стиль вывода по умолчанию: краткое описание различий между двумя файлами. В формате по умолчанию каждой группе изменений предшествует изменить команду в виде рабочий диапазон диапазона для описания позиций и типов изменений, необходимых для преобразования первого файла во второй:
Таблица 20-4: Команды изменения diff
изменить описание
изменить описание
r1ar2 Добавьте строки в позиции r2 во втором файле на позицию
r1 в первом файле.
r1cr2 Измените (замените) строки в позиции r1 с линиями в позиции r2 во втором файле.
r1dr2 Удалите строки в первом файле в позиции r1, который появился бы на расстоянии r2 во втором файле
В этом формате диапазон представляет собой список, состоящий из начальной и конечной строк, разделенных запятыми. Хотя этот формат используется по умолчанию (в основном для соответствия POSIX и обратной совместимости с традиционными версиями Unix Разница), он не так широко используется, как другие дополнительные форматы. Двумя наиболее популярными форматами являются контекстный формат и унифицированный формат.
При просмотре с использованием контекстного формата ( -c option), мы увидим это:
[я @ linuxbox ~] $ diff -c файл1.txt файл2.txt
*** file1.txt 2008-12-23 06: 40: 13.000000000 -0500
--- file2.txt 2008-12-23 06: 40: 34.000000000 -0500
***************
*** 1,4 ****
- abcd
--- 1,4 ----
bcd
+ А
[я @ linuxbox ~] $ diff -c файл1.txt файл2.txt
*** file1.txt 2008-12-23 06: 40: 13.000000000 -0500
--- file2.txt 2008-12-23 06: 40: 34.000000000 -0500
***************
*** 1,4 ****
- abcd
--- 1,4 ----
bcd
+ А
Вывод начинается с имен двух файлов и их временных меток. Первый файл отмечен звездочками, а второй - тире. В остальной части списка эти маркеры будут обозначать соответствующие файлы. Затем мы видим группы изменений, включая количество окружающих контекстных строк по умолчанию. В первой группе мы видим:
*** 1,4 ***
что указывает на строки с 1 по 4 в первом файле. Позже мы видим:
--- 1,4 ---
что указывает на строки с 1 по 4 во втором файле. В группе изменений строки начинаются с одного из четырех индикаторов:
Таблица 20-5: Индикаторы изменения формата контекста diff
Индикатор Значение
Индикатор Значение
blank Строка, показанная для контекста. Это не указывает на разницу между двумя файлами.
- Строка удалена. Эта строка появится в первом файле, но не во втором файле.
+ Добавлена строчка. Эта строка появится во втором файле, но не в первом.
! Линия изменилась. Отобразятся две версии строки, каждая в своем соответствующем разделе группы изменений.
Унифицированный формат похож на контекстный, но более лаконичен. Он указывается в -u опции:
[я @ linuxbox ~] $ diff -u файл1.txt файл2.txt
--- file1.txt 2008-12-23 06: 40: 13.000000000 -0500
+++ file2.txt 2008-12-23 06: 40: 34.000000000 -0500
@@ -1,4 +1,4 @@
-abcd
+e
[я @ linuxbox ~] $ diff -u файл1.txt файл2.txt
--- file1.txt 2008-12-23 06: 40: 13.000000000 -0500
+++ file2.txt 2008-12-23 06: 40: 34.000000000 -0500
@@ -1,4 +1,4 @@
-abcd
+e
Наиболее заметным различием между контекстным и унифицированным форматами является устранение повторяющихся строк контекста, что делает результаты унифицированного формата короче, чем результаты контекстного формата. В нашем примере выше мы видим временные метки файлов, подобные меткам контекстного формата, за которыми следует строка @@ -1,4 +1,4 @@. Это указывает на строки в первом файле и строки во втором файле, описанные в группе изменений. После этого идут сами строки с тремя строками контекста по умолчанию. Каждая строка начинается с одного из трех возможных символов:
Таблица 20-6: Индикаторы изменения унифицированного формата diff
Значение символа
Значение символа
пусто Эта строка используется обоими файлами.
- Эта строка была удалена из первого файла.
+ Эта строчка была добавлена в первый файл.