Сравнение файлов содержимому linux

Содержание
  1. Сравнение файлов содержимому linux
  2. Сравнение файлов в Linux – утилита diff
  3. Основные возможности утилиты diff
  4. Синтаксис команды diff и её основные опции
  5. Использование команды diff
  6. Создание патчей (заплаток) с помощью утилиты diff
  7. Заключение
  8. Как сравнить два текстовых файла с помощью Linux
  9. Создание файлов для сравнения
  10. Как сравнить два файла с помощью Linux
  11. Как просто показать, если файлы разные
  12. Как показать сообщение, если файлы одинаковые
  13. Как произвести различия бок о бок
  14. Ограничение ширины столбца
  15. Как игнорировать различия в регистре при сравнении файлов
  16. Как игнорировать конечный пробел в конце строки
  17. Как игнорировать все различия белого пространства между двумя файлами
  18. Как игнорировать пустые строки при сравнении двух файлов
  19. Резюме
  20. Команда diff в Linux: сравниваем два файла
  21. Что из себя представляет команда diff в Linux?
  22. Синтаксис команды diff
  23. Примеры использования команды diff
  24. Синтаксис команды patch
  25. Примеры использования команды patch
  26. Итоги

Сравнение файлов содержимому linux

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

Используйте cmp, чтобы определить, различаются ли два текстовых файла. В качестве аргумента укажите два имени файла, и, если файлы содержат одинаковые данные, cmp не вернет результата. Если же файлы различаются, cmp выводит позицию и номер строки в файлах, в которых обнаружены различия.

Чтобы определить, в чем различаются файлы `master’ и `backup’, наберите:

$ cmp master backup [Enter]

Чтобы сравнить два файла и получить отчет о различиях в них, используйте утилиту diff. Отчет о различиях форматируется таким образом, чтобы другие утилиты (например, patch) могли использовать его, чтобы сделать сравниваемые файлы идентичными. В качестве аргументов для diff нужно указать имена сравниваемых файлов.

Чтобы сравнить файлы `manuscript.old’ и `manuscript.new’, введите:

$ diff manuscript.old manuscript.new [Enter]

Отчет о различиях выводится в файл стандартного вывода; чтобы сохранить его в файл на диске, перенаправьте вывод в файл:

$ diff manuscript.old manuscript.new > manuscript.diff [Enter]

В этом случае отчет будет сохранен в файле `manuscript.diff’.

Чтобы нагляднее увидеть различия в двух файлах, используйте команду sdiff; вместо генерации отчета о различиях, она выводит файлы в две колонки, разделяемые пробелами. Различающиеся строки разделяются `|’; строки, встречающиеся только в первом файле, заканчиваются ` ‘.

Чтобы сравнить файлы `laurel’ и `hardy’ на экране, введите:

$ sdiff laurel hardy less [Enter]|

Для одновременного сравнения трех файлов используйте diff3.

Чтобы вывести отчет о различиях между файлами `larry’, `curly’, и `moe’ в файл `stooges’, введите:

Источник

Сравнение файлов в Linux – утилита diff

Очень часто возникают ситуации, когда необходимо сравнить содержимое двух или нескольких текстовых файлов. Например, для системных администраторов важно знать о конкретных различиях в конфигурации обслуживаемых систем. Программистам и разработчикам не менее важно быстро выявить различия в коде проектов, а также быстро создать патч, отражающий соответствующие изменения между двумя файлами или разными версиями одного. Это лишь самый распространённый перечень ситуаций, когда использование специализированных утилит для сравнения содержимого файлов приходится очень кстати и экономит кучу времени. Одной из таких утилит в системах Linux является diff – о ней и пойдёт речь в данной статье.

Основные возможности утилиты diff

Главное и, наверное, самое ценное преимущество diff в том, что эта утилита прекрасно работает через интерфейс командной строки. Вот почему она довольно популярна среди системных администраторов. Однако, это обстоятельство вполне закономерно объясняет и имеющийся у diff недостаток — работа с ней недостаточно наглядна, а для новичков довольно сложна.

В отличие от других аналогичных утилит, которые можно использовать исключительно в графической среде, diff прекрасно справляется со своими задачами в командной оболочке. Ну а некоторые неудобства, связанные с восприятием выводимых результатов работы утилиты — это в большинстве случаев, всего лишь недостаток пользовательского опыта работы как в командной оболочке, так и с самой утилитой diff. Стоит ещё раз отметить, что порог вхождения у неё для новичков действительно, довольно высок.

Утилита diff принимает на вход имена файлов, которые необходимо построчно сравнить, а также набор опций, управляющих режимами работы самой утилиты. В официальном руководстве (доступном по команде man diff) можно получить информацию о всех доступных для diff опциях. В данной же статье описываются лишь основные и часто используемые опции, а также простые и наглядные приёмы использования программы.

Читайте также:  Linux ufrii printer driver

Синтаксис команды diff и её основные опции

Правила использования утилиты diff задаются командой, имеющей следующий синтаксис:

Здесь в качестве [FILES] задаются через пробел имена файлов для сравнения. [OPTION] определяет опции работы команды, основные из которых приведены в следующей таблице:

Опция Значение
-q, —brief Выводит только различия файлов.
-s Выводит различия только при полном совпадении файлов.
-c, -C Выводит количество совпадающих строк.
-u, -U Выводит количество отличающихся строк.
-y, —side-by-side Выводит содержимое в столбцах для сравнения «бок о бок».
-l, —paginate Постраничный вывод с поддержкой перелистывания.
-r, —recursive Рекурсивное сравнение всех файлов в подкаталогах.
-i, —ignore-case Игнорировать регистр символов.
-b, —ignore-space-change Игнорировать изменения в изменении пробелов.
-w, —ignore-all-space Игнорировать все пробелы.
-B, —ignore-blank-lines Игнорировать пустые строки.
-Z, —ignore-trailing-space Игнорировать пробелы в конце строк.

Перед тем, как использовать утилиту diff на практике, нужно разобраться с форматом вывода результатов сравнения. Вывод команды diff представляет собой последовательность инструкций, которые необходимо выполнить, чтобы файлы стали идентичными. Эти инструкции строятся на следующих обозначениях:

  • a – добавление строки;
  • d – удаление строки;
  • c – изменение строки.

Вывод, например, может быть таким:

Здесь запись «2c2» означает, что вторая строка в файле №1 (оригинал) отличается от соответствующей (второй) строки в файле №2. Символ « » — файлу №2. Запись «—» чисто косметическая и предназначена для визуальной удобочитаемости результатов. Для наглядности, данный вывод соответствует результату сравнения двух файлов (file1 и file2) со следующим содержимым:

Использование команды diff

Теперь, для более наглядной демонстрации работы утилиты diff можно несколько усложнить условия задачи из предыдущей главы, изменив файл №2 следующим образом:

Тогда, выполнив команду

будет получен следующий вывод:

Здесь выражение «2c2,3» говорит о том, что второй строке (line2) в файле file1 соответствуют изменения в file2 в виде строк «line11» и «line22». Запись «2,3» означает диапазон строк в file2, содержащих изменения относительно строки №2 в file1. Запись «3c5,6» говорит о том, что после строки №3 оригинального файла в его изменённой версии (file2) были добавлены строки № 5 и №6, т. е. «line4» и «line5».

Создание патчей (заплаток) с помощью утилиты diff

Одной из особенностей diff является использование опции «-u» для создания патчей. Которые могут быть использованы для приведения содержимого файла к актуальному состоянию. Это очень удобно, ведь все инструкции для актуализации содержатся в одном файле-патче, который может быть обработан автоматически с помощью специализированной утилиты, например patch. Вывод для примера из предыдущей главы с использованием опции «-u» будет следующим:

Заключение

В заключение следует отметить, что использование утилиты diff вручную в командной оболочке довольно трудоёмко, неудобно и ненаглядно. Но в данном случае важно, что задачи по сравнению файлов могут быть в принципе выполнены. В настоящее время утилита diff используется для построения вокруг неё программных обёрток с графическим пользовательским интерфейсом (подобно kompare, diffmerge и т. д.), что и позволяет использовать её с максимальной эффективностью.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Как сравнить два текстовых файла с помощью Linux

Это руководство покажет вам, как использовать Linux для сравнения двух файлов и вывода их различий на экран или в файл.

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

Как показано в связанном руководстве, существует много способов открыть окно терминала с помощью Linux. Самое простое – нажать клавиши CTRL, ALT и T одновременно.

Создание файлов для сравнения

Чтобы следовать этому руководству, создайте файл с именем «file1» и введите следующий текст:

Вы можете создать файл, следуя этим инструкциям:

Откройте файл, введя следующую команду: nano file1

Введите текст в нано-редактор

Нажмите CTRL и O, чтобы сохранить файл

Нажмите CTRL и X, чтобы выйти из файла

Теперь создайте другой файл с именем «file2» и введите следующий текст:

Вы можете создать файл, следуя этим инструкциям:

Откройте файл, введя следующую команду: nano file2

Введите текст в нано-редактор

Нажмите CTRL и O, чтобы сохранить файл

Нажмите CTRL и X, чтобы выйти из файла

Как сравнить два файла с помощью Linux

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

Простейшая форма команды diff выглядит следующим образом:

Если файлы совпадают, то при использовании этой команды вывод не будет, однако, поскольку есть различия, вы увидите вывод, подобный следующему:

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

Вы можете видеть, что различия между этими двумя файлами следующие:

  • Второй файл имеет только три строки, тогда как первый файл имеет 4.
  • Второй файл показывает «1 зеленая бутылка» в третьей строке, тогда как первый файл говорит «одна зеленая бутылка»
  • Второй файл говорит «там будет» вместо «там будет» в последней строке

Вывод команды diff показывает, что между строками 2 и 4 первого файла и строками 2 и 3 второго файла имеются различия.

Затем перечисляются строки от 2 до 4 из первого файла, за которыми следуют 2 разные строки во втором файле.

Как просто показать, если файлы разные

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

Если файлы отличаются, будет отображено следующее:

Если файлы одинаковые, то ничего не отображается.

Как показать сообщение, если файлы одинаковые

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

Чтобы выполнить это требование с помощью команды diff, вы можете использовать следующую команду :.

Теперь, если файлы одинаковые, вы получите следующее сообщение:

Как произвести различия бок о бок

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

Вы можете изменить вывод команды diff, чтобы результаты отображались рядом. Для этого выполните следующую команду:

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

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

Ограничение ширины столбца

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

Чтобы ограничить количество столбцов, используйте следующую команду:

Как игнорировать различия в регистре при сравнении файлов

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

Как игнорировать конечный пробел в конце строки

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

Как игнорировать все различия белого пространства между двумя файлами

Если вас интересует только текст в файле и вам все равно, есть ли в одном месте больше пробелов, вы можете использовать следующую команду:

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

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

Резюме

Вы можете найти больше информации, прочитав руководство по команде diff.

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

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

Источник

Команда diff в Linux: сравниваем два файла

Представьте, что однажды утром вы просыпаетесь и обнаруживаете, чтоб ваши продакшен-системы «лежат» из-за бага, который только предстоит найти. Один из наихудших кошмаров, верно?

Также оказывается, что для восстановления системы вам нужно сравнить код в двух версиях. Давление растет, все вокруг паникуют (и это понятно).

К счастью, в Linux есть утилита под названием diff, которая вам поможет.

Что из себя представляет команда diff в Linux?

Сравнение файлов и поиск различий между ними — широко распространенная операция. Она особенно полезна, когда нужно сравнить сложный код или конфигурационные файлы.

Сравнивать вручную долго и тяжело, к тому же велика вероятность ошибок. Поэтому Linux предоставляет вам мощную встроенную утилиту под названием diff. Ее применение позволяет сэкономить время и силы.

В Linux также есть еще одна команда, которая отлично дополняет diff, — patch. Она позволяет применить изменения из одного файла в другом. В этой статье мы рассмотрим обе команды и их применение на практике.

Синтаксис команды diff

Команда diff имеет следующий синтаксис:

Команда diff сравнивает два файла построчно. При этом первый из файлов она считает нуждающимся в редактировании и приведении к виду второго файла. Второй файл для diff — образец для сравнения.

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

Указания даются при помощи специальных символов:

  • c — CHANGE — изменение, которое нужно внести в указанной строке первого файла
  • d — DELETE — то, что нужно удалить в первом файле
  • a — ADD — то, что нужно добавить в первый файл

Символ в выводе diff указывает на первый файл, а > — на второй.

Давайте рассмотрим несколько примеров использования команды diff.

Примеры использования команды diff

Чтобы выяснить, являются ли файлы одинаковыми, команда diff дополняется флагом -s . В нашем примере содержимое файлов fileA и sameAsfileA совпадает.

А в следующем примере файлы имеют разный контент. Вывод команды diff говорит, что строки 11 и 14 в showList_v2.js нужно изменить, чтобы они совпадали со строками 11 и 13 в showList_v1.js.

Далее мы рассмотрим мой любимый способ использования команды diff — параллельный просмотр изменений. Для этого нужно применить флаг -y:

И последний пример — с объединенным выводом. Такой output часто используется как input для команды patch (ее мы тоже рассмотрим):

Вот еще несколько полезных флагов, которые можно применять с командой diff:

  • -i — для игнорирования регистра. По умолчанию команда diff учитывает регистр.
  • -w — для игнорирования пробелов в файле. По умолчанию пробелы тоже учитываются и могут считаться различием.

Синтаксис команды patch

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

Использование патчей («заплаток») — самый безопасный способ делиться только лишь изменениями.

Давайте посмотрим, как работают патчи:

Примеры использования команды patch

Предположим, у нас есть простой JavaScript-код в файле print_in_js.js, который выводит строку.

Но в функции вывода что-то сломалось, и нам нужно внести исправления. Мы отсылаем файл print_in_js.js коллеге, который может исправить код.

Наш коллега находит опечатку в строке № 3 и исправляет файл.

Когда файл исправлен и код работает корректно, наш коллега создает патч:

Давайте посмотрим содержимое патча:

Получив патч, мы применяем его:

И — вуаля! — наш код исправлен!

Итоги

Создавать и применять патчи при помощи команд patch и diff довольно просто.

Похожий подход применяется, когда вы пользуетесь системами контроля версий вроде Git или SVN. Знание основ (т. е. работы соответствующих команд Linux) поможет вам лучше понять работу систем контроля версий, а это важно для разработчиков.

Источник

Читайте также:  Для персонализации вам необходимо активировать windows
Оцените статью