logo

Як порівнювати файли рядок за рядком у Linux | Команда diff

У світі Linux керування та порівняння файлів є звичайним завданням для системних адміністраторів і розробників. Здатність порівнювати файли рядок за рядком має вирішальне значення для виявлення відмінностей, налагодження коду та забезпечення цілісності даних. Одним з потужних інструментів, який полегшує цей процес, єdiff>команда. У цій статті ми розглянемо, як використовуватиdiff>команда для порівняння файлів рядок за рядком у Linux.

Зміст

Розуміння команди diff

diff означає різниця .Thediff>command — це універсальна утиліта, яка попередньо встановлена ​​на більшості дистрибутивів Linux. Його основна мета — порівняти вміст двох файлів і відобразити відмінності між ними. Ця команда забезпечує комплексний спосіб виділити зміни, додавання та видалення в зрозумілому та читабельному форматі.



Ця команда використовується для відображення відмінностей у файлах шляхом порівняння файлів рядок за рядком. На відміну від своїх колег, cmp і зв'язок , він повідомляє нам, які рядки в одному файлі потрібно змінити, щоб зробити два файли ідентичними.

Важливо пам’ятати, що диф використовує певні спеціальні символи і інструкції які потрібні, щоб зробити два файли ідентичними. Він розповідає вам про те, як змінити перший файл, щоб він відповідав другому файлу.

Базовий синтаксис команди diff

Основний синтаксисdiff>команда така:

diff [OPTION]... FILE1 FILE2>

Тут, ` FILE1`> і ` FILE2`> це два файли, які ви хочете порівняти.

` OPTION`> прапор дозволяє налаштувати поведінку ` diff`> команда.

Параметри, доступні в команді diff

Варіант

опис

-c>або--context>

Виведення відмінностей у контекстному режимі

-u>або--unified>

Вихідні відмінності в уніфікованому режимі (більш стисло)

-i>або--ignore-case>

Виконайте порівняння без урахування регістру

–ignore-all-space

Ігноруйте пробіли під час порівняння рядків

– коротко

Актриса Рубіна Ділайк

Виводити лише те, чи відрізняються файли, без деталей

– рекурсивний

Рекурсивне порівняння каталогів

-y>або--side-by-side>

Відобразіть результат у форматі поруч

Практична реалізація статті «Як порівнювати файли рядок за рядком у Linux?» :

Порівняння двох файлів

Порівнюйте файли рядок за рядком у Linux.

Припустимо, у нас є два файли з іменами a.txt і b.txt містить 5 індійських штатів.

cat a.txt cat b.txt>
відображення вмісту файлів за допомогою команди cat

відображення вмісту файлів за допомогою команди cat

Тепер, застосовуючи команду diff без будь-яких опцій, ми отримуємо наступний результат:

diff a.txt b.txt>
порівняння файлів рядок за рядком у Linux

порівняння файлів рядок за рядком у Linux

Давайте подивимося, що означає цей вихід. Перший рядок диф вихід міститиме:

  • Номери рядків, що відповідають першому файлу,
  • Спеціальний символ і
  • Номери рядків, що відповідають другому файлу.

Як і в нашому випадку, 0a1 що означає після рядки 0 (на самому початку файлу), які ви повинні додати Таміл Наду щоб відповідати другому рядку файлу під номером 1. Потім він повідомляє нам, що це за рядки в кожному файлі, перед яким стоїть символ:

  • Рядки, яким передує a < це рядки з першого файлу.
  • Рядки, яким передує > це рядки з другого файлу.
  • Наступний рядок містить 2,3c3 це означає, що з рядка 2 на рядок 3 у першому файлі потрібно змінити, щоб відповідати рядку номер 3 у другому файлі. Потім він повідомляє нам ці рядки з наведеними вище символами.
  • Три риски (—) просто розділіть рядки файлу 1 і файлу 2.

Щоб зробити обидва файли ідентичними, спочатку додайте Таміл Наду у першому файлі на самому початку, щоб відповідати рядку 1 другого файлу, після цього змініть рядки 2 і 3 першого файлу, тобто. Уттар-Прадеш і Колката з рядком 3 другого файлу, тобто. Андхра-Прадеш . Після цього змініть рядок 5 першого файлу, тобто Джамму і Кашмір з рядком 5 другого файлу, тобто. Уттар-Прадеш .

Видалення рядка у файлах за допомогою команди diff

Розглянемо сценарій, деdiff>вказує на необхідність видалення рядка. Дано два файли,a.txt>іb.txt>:

відображення вмісту файлів за допомогою команди cat

відображення вмісту файлів за допомогою команди cat

diff a.txt b.txt>
Видалення рядка у файлі

Видалення рядка у файлі

Тут вище вихід 3d2 означає видалити 3-й рядок першого файлу, тобто Телангана так що обидва файли синхронізувати у рядку 2.

Перегляд відмінностей у контекстному режимі

Щоб переглянути відмінності в контекстному режимі, використовуйте -c варіант. Давайте спробуємо зрозуміти це на прикладі, у нас є два файли file1.txt і file2.txt :

відображення вмісту файлів за допомогою команди cat

відображення вмісту файлів за допомогою команди cat

diff -c file1.txt file2.txt>
Перегляд різниці в контекстному режимі

Перегляд різниці в контекстному режимі

У вихідних даних вище:

  • Перший файл позначається символом ` ***`> , а другий файл позначається ` ---`> .
  • Рядок із ` ***************`> служить роздільником.
  • Перші два рядки надають інформацію про файл 1 і файл 2, відображаючи назву файлу, дату зміни та час зміни.
  • Після цього три зірочки ` ***`> за ними йде діапазон рядків з першого файлу (рядки з 1 по 4). Чотири зірочки` ****`> наступний Потім вміст першого файлу відображається з певними індикаторами:
    • Якщо рядок не змінюється, перед ним ставляться два пропуски.
    • Якщо рядок потрібно змінити, перед ним ставиться символ і пробіл. Символи вказують на:
      • `+`> : Рядок у другому файлі буде додано до першого файлу для ідентичних результатів.
      • `-`> : Рядок у першому файлі, який потрібно видалити для ідентичних результатів.
  • Три тире` ---`> після них іде діапазон рядків з другого файлу (рядки з 1 по 4), розділених комою. Чотири тире ` ----`> далі, і буде показано вміст другого файлу.

Перегляд відмінностей в єдиному режимі

Щоб переглянути відмінності в уніфікованому режимі, використовуйте варіант. Він схожий на контекстний режим, але він не відображає жодної зайвої інформації або відображає інформацію в стислій формі.

відображення вмісту файлів за допомогою команди cat

відображення вмісту файлів за допомогою команди cat

diff -u file1.txt file2.txt>
Різниця перегляду в уніфікованому режимі

Різниця перегляду в уніфікованому режимі

У вихідних даних вище:

  • Перший файл позначається символом ` ---`> , а другий файл позначено ` +++`> .
  • Перші два рядки надають інформацію про файл 1 і файл 2, включаючи дату й час зміни.
  • Після цього ` @@ -1> `,`> 4 +1`> ,`> 4 @@`> позначає діапазон рядків для обох файлів. У цьому випадку він представляє рядки з 1 по 4 в обох файлах.
  • Наступні рядки представляють вміст файлів із певними індикаторами:
    • Незмінені рядки відображаються без префікса.
    • Рядки в першому файлі, який буде видалено, мають префікс->.
    • Рядки у другому файлі, який потрібно додати, мають префікс+>.

У цьому прикладі вихідні дані вказують на те, що, щоб зробити обидва файли ідентичними, рядки, що містять mv і comm, потрібно видалити з першого файлу (file1.txt>), і до нього потрібно додати рядки, що містять diff і comm.

Порівняння файлів без урахування регістру

За замовчуванням ` diff`> чутливий до регістру. Щоб виконати порівняння без урахування регістру, використовуйте ` -i`> варіант:

відображення вмісту файлів за допомогою команди cat

відображення вмісту файлів за допомогою команди cat

Thediff>потім використовується команда для порівняння цих файлів із-i>параметр, що робить порівняння нечутливим до регістру.

diff -i file1.txt file2.txt>
Порівняння без урахування регістру

Порівняння без урахування регістру

  • 2d1>: Це вказує на зміну рядка 2 першого файлу (file1.txt>). Thed>означає видалення, і вказує видалити рядок 2 із першого файлу.
    • >: цей рядок означає вміст рядка, який потрібно видалити. В даному випадку це mv.
  • 3a3>: Це вказує на додавання в рядку 3 першого файлу (file1.txt>). Thea>означає додати, і в ньому написано додати рядок у позиції 3.
    • >різниця>: цей рядок представляє вміст, який потрібно додати. У цьому випадку це диф.

Підсумовуючи, результат говорить нам, що для того, щоб обидва файли були ідентичними (ігноруючи регістр), нам потрібно видалити рядок, що містить mv, із першого файлу (file1.txt>) і додайте рядок diff у ту саму позицію. Thediff>команда, з-i>опція дозволяє проводити порівняння без урахування регістру, змушуючи вважати mv і MV однаковими під час аналізу.

Відображенняdiff>Версія

Щоб перевірити версію ` diff`> встановлений у вашій системі, використовуйте ` --version`> варіант:

diff --version>
Відображення версії команди diff

Відображення версії команди diff

Ця команда надає інформацію про версію, ліцензію та авторів ` diff`> корисність.

Часті запитання щодо команди diff – поширені запитання

Як я можу використовуватиdiff>команду для порівняння двох файлів рядок за рядком у Linux?

Щоб порівняти два файли рядок за рядком за допомогоюdiff>просто використовуйте такий синтаксис:

diff file1.txt file2.txt>

Ця команда відобразить відмінності між двома файлами, виділяючи додавання, видалення та зміни.

Чи можу я ігнорувати відмінності пробілів під час порівняння файлів ізdiff>команда?

Так,diff>Команда забезпечує-w>або--ignore-all-space>можливість ігнорувати відмінності пробілів. Наприклад:

diff -w file1.txt file2.txt>

Це особливо корисно під час порівняння файлів коду, де зміни у відступах або інтервалах незначні.

Як я можу створити файл виправлення за допомогоюdiff>команда?

Щоб створити файл виправлення, що представляє відмінності між двома файлами, використовуйте-u>і перенаправте вихід у файл:

diff -u file1.txt file2.txt>mypatch.patch>

Згенерований файл виправлення можна застосувати пізніше для синхронізації іншого файлу зі змінами.

У чому полягає уніфікований форматdiff>вихід, і чим він відрізняється від формату контексту?

Уніфікований формат (` -u`> варіант) у ` diff`> вихід забезпечує більш стисле та зрозуміле представлення відмінностей порівняно з контекстним форматом (` -c`> варіант). Він відображає зміни в більш компактній формі, що полегшує розуміння змін між файлами.

Як мені рекурсивно порівняти два каталоги в Linux за допомогоюdiff>команда?

Щоб рекурсивно порівняти два каталоги та їхній вміст, використовуйте ` -r`> або ` --recursive`> варіант зdiff>команда:

diff -r directory1/ directory2/>

Ця команда порівнює всі файли у вказаних каталогах і надає детальну інформацію про відмінності.

Висновок

У світі Linux порівняння файлів є звичайним завданням для системних адміністраторів і розробників. ` diff> command — це зручний інструмент, який допомагає в цьому процесі. У цій статті описано, як використовувати ` diff`> для порівняння файлів рядок за рядком у Linux. Він охоплює базовий синтаксис, важливі параметри, такі як контекстний режим і уніфікований режим, а також практичні програми, такі як створення файлів латок і рекурсивне порівняння каталогів. Якщо ви налагоджуєте код чи забезпечуєте цілісність файлу, розуміння та опанування ` diff`> Команда необхідна для ефективного керування файлами в Linux.