Простой вывод команды diff
Я видел много примеров использования команды diff, но ни один не детализировал ее основное использование. Вот содержимое двух файлов, которые я хотел бы использовать:
cat -A file1.txt
a$
b$
c$
d$
cat -A file2.txt
b$
c$
d$
e$
Если я использую команду diff следующим образом:
diff file1.txt file2.txt
Я получил:
1d0
< a
4a4
> e
Я хотел бы знать, что они подразумевают под строками 1 и 0 в 1d0 и 4 и 4 в 4a4, в дополнение к знакам "меньше" и "больше". В более общем смысле, почему знак "меньше" стоит перед знаком "а", а не знаком "больше"? Какая разница?
2 ответа
Из diff
руководство:
'l ar'
Добавьте строки в диапазоне r второго файла после строки l первого файла. Например, '8a12,15
'означает добавление строк 12–15 файла 2 после строки 8 файла 1; или, если файл 2 изменяется в файл 1, удалить строки 12–15 файла 2.'f ct'
Замените строки в диапазоне f первого файла на строки в диапазоне t второго файла. Это как комбинированное добавление и удаление, но более компактное. Например, '5,7c8,10
'означает изменить строки 5–7 файла 1 на строки 8–10 файла 2; или, если файл 2 переходит в файл 1, измените строки 8–10 файла 2 на строки 5–7 файла 1.'r dl'
Удалить строки в диапазоне r из первого файла; В строке l они должны были появиться во втором файле, если бы они не были удалены. Например, '5,7d3
'означает удаление строк 5–7 файла 1; или, если файл 2 изменяется в файл 1, добавить строки 5–7 файла 1 после строки 3 файла 2.
>
а также <
имеет смысл, если вы посмотрите на параллельный формат вывода:
'<'
Файлы отличаются, и только первый файл содержит строку.'>'
Файлы отличаются, и только второй файл содержит строку.
Пример выходов из руководства:
бок о бок:
The Way that can be told of is n < The name that can be named is no < The Nameless is the origin of He The Nameless is the origin of He The Named is the mother of all t | The named is the mother of all t > Therefore let there always be no Therefore let there always be no so we may see their subtlety, so we may see their subtlety, And let there always be being, And let there always be being, so we may see their outcome. so we may see their outcome. The two are the same, The two are the same, But after they are produced, But after they are produced, they have different names. they have different names. > They both may be called deep and > Deeper and more profound, > The door of all subtleties!
нормальный:
1,2d0 < The Way that can be told of is not the eternal Way; < The name that can be named is not the eternal name. 4c2,3 < The Named is the mother of all things. --- > The named is the mother of all things. > 11a11,13 > They both may be called deep and profound. > Deeper and more profound, > The door of all subtleties!
Команда diff подробно объясняется здесь. Вы найдете то, что вы ищете, в верхней части страницы под заголовком "Как работает дифференциал".
В частности, 1d0
означает, что вы должны удалить одну строку из первого файла, чтобы они были синхронизированы до нулевой строки. Это не первая строка файла, это в основном говорит. Если вы сделаете это удаление, оба файла начнутся с пустой точки. Следующая строка вывода в файле 1 - это первая строка вывода в обоих файлах (т.е. следующая строка должна быть строкой 1).
Вам может быть лучше бегать diff -c file1.txt file2.txt
если вы хотите что-то, что легче читать.