Сравнение файлов в Linux с помощью diff

Сравнение файлов

diff man

Предположим у вас есть файл 1 следующего содержания

a

И файл 2 у которого первая строка пустая

a

сравнить их можно командой diff

diff 1 2

0a1 >

В выводе команды diff содержится инструкция о том как из первого файла сделать второй.

0a1 означает:

После нулевой строки первого файла нужно добавить первую строку второго файла.

Другими словами: в начало первого файла нужно вставить первую (пустую) строку второго файла и тогда файлы станут одинаковыми

> означает второй файл. После должно быть содеражание строки, которую нужно вставить, но она в нашем случае пустая, поэтому ничего нет.

a - add    - добавить

c - change - изменить

d - delete - удалить

Давайте убедимся что мы всё правильно поняли - откройте файл 2 и запишите какой-то текст в первую строку которая была пустой. Больше ничего менять не нужно.

cat 2

www.topbicycle.ru
a

Снова сравним файлы 1 и 2 . Мы ожидаем, что ничего не изменится, только после > появится наш текст

diff 1 2

0a1 > www.topbicycle.ru

Как видите, так и произошло, потому что чтобы из первого файла получить второй нужно в самое начало первого файла добавить строку с текстом www.topbicycle.ru

Если теперь попробовать сравнить не файл 1 с 2 а наоборот 2 с 1 . Что должно измениться: теперь файл 2 принят за основу и команда diff сообщит нам что нужно сделать чтобы получить из файла 2 файл 1

diff 2 1

1d0 < www.topbicycle.ru

1d0 означает, что нужно удалить первую строку первого файла и тогда мы попадаем в начало второго файла

< www.topbicycle.ru это содержание строки первого файла о которой идёт речь

Рассмотрим файл 3 у которого первая и вторая строки пустые а в третьей символ a

Подумайте самостоятельно, что будет если сравнить файлы 1 и 3. А также наоборот 3 и 1

vi 1

a

vi 3

a

diff 1 3

0a1,2 > >

0a1,2 означает, что в начало файла 1 нужно добавить первую и вторую строки файла 3

Если сравнить наоборот

diff 3 1

1,2d0 < <

1,2d0 означает, что в файле 3 нужно удалить строки 1 и 2 и тогда мы попадаем в начало файла 1

0 в конце можно понимать как строку по которой произойдёт выравнивание файлов.

Для примера создадим файл 4 у которого первая строка это символ a, вторая строка символ b

vi 4

a b

Добавим три пустые строки в середину и сохраним как файл 5

vi 5

a b

Сравним 4 и 5

diff 4 5

1a2,4 > > >

Чтобы из файла 4 получить файл 5 нужно после первой строки файла 4 добавить строки со второй по четвёртую файла 5

Здесь всё просто, попробуем наоборото

diff 5 4

2,4d1 < < <

Чтобы из файла 5 получить файл 4 нужно строки со второй по четвёртую в файле 4 удалить и тогда мы попадём на строку 1 файла 4

То есть в этом примере после удаления мы выровнялиьс по строке 1 а не по началу файла как в предыдущем примере.

Предположим у вас есть файл 1 следующего содержания

a
b
c

И пустой файл 2 сравнить их можно командой diff

diff 1 2

1,3d0 < a < b < c

Расшифруем результат: нужно в первом файле удалить три первые строки и тогда файлы выровняются по началу файлов.

Если теперь добавить a в первую строку файла 2 и сравнить снова

diff 1 2

2,3d1 < b < c

Расшифруем результат: нужно в первом файле удалить вторую и третью строки и тогда файлы выровняются после первой строки файлов.

Предположим у вас есть файл websites.txt со списком сайтов

cat websites.txt

https://www.urn.su https://www.heihei.ru https://www.topbicycle.ru

Скопируйте его командой

cp websites.txt newsites.txt

Убедиться, что файлы одинаковые пока что легко, можно даже выполнить

cat newsites.txt

https://www.urn.su https://www.heihei.ru https://www.topbicycle.ru

И понять, что ничего не изменилось.

Если файл слишком большой можно воспользоваться командой diff

diff websites.txt newsites.txt

Пока файлы идентичны вывод будет пустым

Добавьте новую запись в файл newsites.txt

echo https://www.andreyolegovich.ru >> newsites.txt

cat newsites.txt

https://www.urn.su https://www.heihei.ru https://www.topbicycle.ru https://www.andreyolegovich.ru

Команда diff теперь покажет место, в котором файлы различаются

diff websites.txt newsites.txt

3a4 > https://www.andreyolegovich.ru

3a4 означает, что различие найдено между третьей строкой первого файла и четвёртой строкой второго.

В данном случае четвёртой строки и первого файла просто нет

> https://www.andreyolegovich.ru это символы которых нет в первом файле

Внесите более мелкие изменения. Например удалим во втором файле www. перед heihei.ru

vi newsites.txt

https://www.urn.su https://heihei.ru https://www.topbicycle.ru https://www.andreyolegovich.ru

diff websites.txt newsites.txt

2c2 < https://www.heihei.ru --- > https://heihei.ru 3a4 > https://www.andreyolegovich.ru

< означает - в первом файле

> означает - во втором файле

diff находит все строки с различиями и выводит их. Поэтому если вы сделаете ещё какие-то изменения в той же строке, например добавите в конец /Spain/ принципиально ничего не изменится

vi newsites.txt

https://www.urn.su https://heihei.ru/Spain/ https://www.topbicycle.ru https://www.andreyolegovich.ru

diff websites.txt newsites.txt

2c2 < https://www.heihei.ru --- > https://www.heihei.ru/Spain/ 3a4 > https://www.andreyolegovich.ru

Если добавить несколько пустых строк

https://www.urn.su https://www.heihei.ru https://www.topbicycle.ru https://www.andreyolegovich.ru

Будут показаны диапазоны с пустыми строками

1a2,5 > > > > 2a7,13 > > > > > > > 3a15 > https://www.andreyolegovich.ru

a2,5 значит, что со второй по пятую строки

a7,13 значит, что с седьмой по тринадцатую

Если удалить несколько строк

vi newsites.txt

https://www.urn.su https://www.andreyolegovich.ru

diff websites.txt newsites.txt

2c2 < https://www.heihei.ru --- > https://heihei.ru/Spain/ 3a4 > https://www.andreyolegovich.ru

Поиск по сайту

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: