Сравнить два текстовых файла

Обновлено: 21.11.2024

Гэри Ньюэлл был внештатным сотрудником, разработчиком приложений и тестировщиком программного обеспечения с более чем 20-летним опытом работы в сфере ИТ, работая с Linux, UNIX и Windows.

Что нужно знать

  • Чтобы сравнить, запустите: diff файл1 файл2
  • Покажите, чем они отличаются: diff -q файл1 файл2
  • Покажите, чем они похожи: diff -s файл1 файл2

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

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

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

Создайте первый файл

Создайте файл с именем file1 и введите следующий текст:

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

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

Самый быстрый способ открыть окно терминала в Linux — одновременно нажать клавиши CTRL+ALT+T.

Введите текст в редактор nano.

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

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

Создайте второй файл

Далее создайте еще один файл с именем file2 и введите следующий текст:

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

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

Введите текст в редактор nano.

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

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

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

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

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

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

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

Различия между двумя файлами заключаются в следующем:

  • Во втором файле всего три строки. В первом файле их четыре.
  • Во втором файле в третьей строке указана 1 зеленая бутылка. В первом файле указана одна зеленая бутылка.
  • Во втором файле в последней строке указано "там бы" вместо "там бы".

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

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

Как показать, только если файлы отличаются

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

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

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

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

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

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

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

Как создавать различия рядом

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

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

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

Ограничить ширину столбца

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

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

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

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

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

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

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

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

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

Обзор

Дополнительную информацию можно найти в руководстве по команде diff.

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

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

Дэйв Маккей

Дэйв Маккей
Писатель

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

Погружение в различия

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

Давайте приступим к анализу двух файлов. Порядок файлов в командной строке определяет, какой файл diff считает «первым файлом», а какой — «вторым файлом». В приведенном ниже примере alpha1 — это первый файл, а alpha2 — второй файл. Оба файла содержат фонетический алфавит, но второй файл, alpha2, подвергся дальнейшему редактированию, так что эти два файла не идентичны.

С помощью этой команды мы можем сравнить файлы. Введите diff , пробел, имя первого файла, пробел, имя второго файла и нажмите Enter.

Как мы анализируем этот результат? Когда вы знаете, что искать, это не так уж плохо. Каждое различие перечисляется по очереди в одном столбце, и каждое различие помечается. Метка содержит цифры по обе стороны от буквы, например 4c4. Первое число — это номер строки в alpha1, а второе число — это номер строки в alpha2. Буква в середине может быть:

  • c: необходимо изменить строку в первом файле, чтобы она соответствовала строке во втором файле.
  • d: строка в первом файле должна быть удалена, чтобы соответствовать второму файлу.
  • a: В первый файл необходимо добавить дополнительный контент, чтобы он соответствовал второму файлу.

4c4 в нашем примере говорит нам, что четвертая строка alpha1 должна быть изменена, чтобы соответствовать четвертой строке alpha2. Это первое различие между двумя найденными файлами.

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

Следующее изменение обозначается 12c12 . Применяя ту же логику, это говорит нам о том, что строка 12 в alpha1 содержит слово Lima, а строка 12 в alpha2 содержит слово Linux.

Третье изменение относится к строке, которая была удалена из alpha2. Метка 21d20 расшифровывается как «строка 21 должна быть удалена из первого файла, чтобы оба файла синхронизировались, начиная со строки 20». Строка показывает нам содержимое строки, которую нужно удалить из alpha1.

Четвертое отличие помечено как 26a26,28 . Это изменение относится к трем дополнительным строкам, добавленным в alpha2. Обратите внимание на 26,28 на этикетке. Двухстрочные числа, разделенные запятой, представляют диапазон номеров строк. В этом примере диапазон составляет от строки 26 до строки 28. Метка интерпретируется как «в строке 26 в первом файле добавить строки с 26 по 28 из второго файла». Нам показаны три строки в alpha2, которые нужно добавить к alpha1. Они содержат слова Quirk, Strange и Charm.

Острые остроты

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

Вы можете использовать параметр -q (brief), чтобы получить столь же краткое утверждение о двух разных файлах.

Одна вещь, на которую следует обратить внимание, это то, что с двумя идентичными файлами параметр -q (краткий) полностью замолкает и вообще ничего не сообщает.

Альтернативный вид

Опция -y (бок о бок) использует другой макет для описания различий файлов. Часто бывает удобно использовать параметр -W (ширина) с видом сбоку, чтобы ограничить количество отображаемых столбцов. Это позволяет избежать уродливых строк с переносом, которые затрудняют чтение вывода. Здесь мы указали diff производить отображение рядом друг с другом и ограничить вывод до 70 столбцов.

Первый файл в командной строке, alpha1, показан слева, а вторая строка в командной строке, alpha2, показана справа. Строки из каждого файла отображаются рядом. Рядом с теми строками в alpha2, которые были изменены, удалены или добавлены, есть индикаторные символы.

  • |: строка, которая была изменена во втором файле.
  • : строка, добавленная во второй файл, которой нет в первом файле.

Если вы предпочитаете более компактную сводку различий между файлами, используйте параметр --suppress-common-lines. Это заставляет diff отображать только измененные, добавленные или удаленные строки.

Добавьте всплеск цвета

Еще одна утилита под названием colordiff добавляет цветовую подсветку в вывод diff. Это значительно упрощает поиск различий между линиями.

Используйте apt-get для установки этого пакета в вашу систему, если вы используете Ubuntu или другой дистрибутив на основе Debian. В других дистрибутивах Linux вместо этого используйте инструмент управления пакетами вашего дистрибутива Linux.

Используйте colordiff так же, как и diff .

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

Предоставление некоторого контекста

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

Первый метод использует параметр -c (скопированный контекст).

Выход diff имеет заголовок. В заголовке перечислены два имени файла и время их модификации. Перед именем первого файла стоят звездочки (*), а перед именем второго файла — тире (-). Звездочки и тире будут использоваться для обозначения того, к какому файлу принадлежат строки в выходных данных.

Линия звездочек с 1,7 в середине указывает на то, что мы смотрим на строки из alpha1. Чтобы быть точным, мы смотрим на строки с первой по седьмую. Слово Delta помечается как измененное. Рядом с ним стоит восклицательный знак ( ! ), и он красный. Перед и после этой строки отображаются три строки неизменного текста, поэтому мы можем видеть контекст этой строки в файле.

Линия тире с 1,7 в середине говорит нам, что мы сейчас смотрим на строки из alpha2. Опять же, мы смотрим на строки с первой по седьмую, при этом слово Дейв в четвертой строке помечено как отличающееся.

Три строки контекста выше и ниже каждого изменения — это значение по умолчанию. Вы можете указать, сколько строк контекста вы хотите предоставить diff. Для этого используйте параметр -C (скопированный контекст) с заглавной «C» и укажите необходимое количество строк:

Вторая опция сравнения, которая предлагает контекст, – это опция -u (унифицированный контекст).

Как и раньше, у нас есть заголовок на выходе. Два файла названы, и показано время их модификации. Перед названием alpha1 стоят тире (-), а перед названием alpha2 — знаки плюс (+). Это говорит нам о том, что тире будут использоваться для обозначения alpha1, а знаки плюс будут использоваться для обозначения alpha2. По всему листингу разбросаны строки, начинающиеся со знаков ( @ ). Эти линии отмечают начало каждой разницы. Они также сообщают нам, какие строки отображаются в каждом файле.

Нам показаны три строки до и после строки, отмеченной как отличающаяся, чтобы мы могли видеть контекст измененной строки. В едином представлении линии с разницей отображаются одна над другой. Строке из alpha1 предшествует тире, а строке из alpha2 предшествует знак плюс. Это отображение достигает в восьми строках того, что скопированное контекстное отображение выше заняло пятнадцать.

Как и следовало ожидать, мы можем попросить diff предоставить именно то количество строк единого контекста, которое мы хотели бы видеть. Для этого используйте параметр -U (унифицированный контекст) с заглавной «U» и укажите необходимое количество строк:

Игнорирование пробелов и регистра

Давайте проанализируем еще два файла, test4 и test5. В них есть имена шести супергероев.

Результаты показывают, что diff не находит различий с линиями Black Widow, Spider-Man и Thor. Он отмечает изменения в линиях Капитана Америки, Железного человека и Халка.

Так что же изменилось? Что ж, в test5 Халк пишется со строчной буквы «h», а у Капитана Америки есть дополнительный пробел между «Капитан» и «Америка». Хорошо, это ясно видно, но что не так с линией Ironman? Видимых различий нет. Вот хорошее практическое правило. Если вы его не видите, ответ — пустое пространство. В конце этой строки почти наверняка есть один-два пробела или символ табуляции.

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

  • -i: игнорировать различия в регистре.
  • -Z: игнорировать пробелы в конце.
  • -b: игнорировать изменения количества пробелов.
  • -w: игнорировать все изменения пробелов.

Давайте попросим diff еще раз проверить эти два файла, но на этот раз проигнорировать любые различия.

Строки со словами «The Hulk» и «The hulk» теперь считаются совпадающими, и для строчной буквы «h» никакие различия не помечаются. Давайте попросим diff также игнорировать пробелы в конце.

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

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

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

< /tbody>
Команды Linux
Файлы tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm
Процессы alias · screen · top · nice · renice · прогресс · strace · systemd · tmux · chsh · история · at · пакетное · бесплатное · которое · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · стена · yes · kill · спать · sudo · su · время · groupadd · usermod · группы · lshw · выключение · перезагрузка · halt · poweroff · passwd · lscpu · crontab · date · bg · fg
Сеть netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · копать · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw
  • › 37 важных команд Linux, которые вы должны знать
  • › Как применить исправление к файлу (и создать исправления) в Linux
  • › 10 основных команд Linux для начинающих
  • › 5 вещей, которые вы, вероятно, не знали о GIF-файлах
  • › 7 основных функций Microsoft Excel для составления бюджета
  • › Сколько оперативной памяти требуется вашему ПК?
  • › Что такое GrapheneOS и как она делает Android более приватным?
  • › Почему СМС должен умереть

Нужно ли сравнивать похожие файлы на наличие изменений? Вот как это сделать в Windows 10 без сторонних инструментов.

Источник: Windows Central

В Windows 10 "fc" — это встроенный в систему инструмент командной строки, который позволяет сравнивать два похожих файла, чтобы определить, как они изменились с течением времени. Обычно fc полезен для сравнения простых текстовых файлов, определения изменений, внесенных в сценарий, определения того, был ли файл изменен, и в подобных случаях.

Инструмент может сравнить два похожих файла или самую новую версию со всеми другими файлами в том же месте. Кроме того, он включает параметры для проверки изменений на уровне текста или в Unicode, ASCII или двоичном режиме.

В этом руководстве по Windows 10 вы узнаете, как использовать инструмент fc для сравнения файлов с помощью командной строки.

Как сравнивать файлы с помощью команды fc в Windows 10

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

  1. Откройте Пуск.
  2. Выполните поиск командной строки, щелкните правой кнопкой мыши верхний результат и выберите параметр «Запуск от имени администратора».

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

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

В этом примере осуществляется переход в папку «Загрузки»:

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

fc имя_файла1.txt имя_файла2.txt

В команде замените имя файла1.txt и имя файла2.txt для имени файлов, которые вы хотите сравнить.

Источник: Windows Central

Введите следующую команду, чтобы сравнить два похожих файла в режиме ASCII, и нажмите Enter:

fc /L имя_файла1.txt имя_файла2.txt

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

fc /a имя_файла1.txt имя_файла2.txt

Источник: Windows Central

Введите следующую команду, чтобы сравнить два файла в формате Unicode mdoe, и нажмите Enter:

fc /u имя_файла1.txt имя_файла2.txt

Источник: Windows Central

Введите следующую команду, чтобы сравнить два файла в режиме блокировки, и нажмите Enter:

fc /b имя_файла1.txt имя_файла2.txt

Источник: Windows Central

Введите следующую команду, чтобы сравнить все файлы (*.txt) в той же папке с новым файлом (filename2.txt) и нажмите Enter:

fc *.txt имя_файла2.txt

Источник: Windows Central

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

fc DRIVE:\PATH\TO\filename1.txt DRIVE:\PATH\TO\filename2.txt

В команде замените DRIVE на букву диска места хранения и \PATH\TO\filename1.txt и \PATH\TO\filename2.txt на путь и имя файлов, которые вы хотите сравнить.

В этом примере сравниваются два файла в разных папках:

fc C:\Users\USERACCOUNT\Downloads\filename1.txt C:\Users\USERACCOUNT\Downloads\new\filename2.txt

Источник: Windows Central

Подтвердите вывод, чтобы увидеть разницу между файлами.

Подсказка. Вы можете просмотреть список параметров и другие примеры, используя команду fc /? команда.

После выполнения этих шагов вы сможете увидеть разницу между двумя похожими файлами.

Дополнительные ресурсы по Windows 10

Для получения дополнительных полезных статей, обзоров и ответов на распространенные вопросы о Windows 10 посетите следующие ресурсы:

Рейтинг всех 15 боев с главными боссами Elden Ring

В Elden Ring есть 15 различных сражений с главными боссами, но какие из них самые лучшие (а какие ужасные)? Вот наш окончательный рейтинг всех без исключения главных боссов в игре.

Обнаружено древнее пасхальное яйцо Windows 1.0 с участием Гейба Ньюэлла

Как раз в тот момент, когда вы думали, что хранилища знаний старой Windows 1.0 исчерпаны, появляется новая запись. И это становится еще более захватывающим: этот конкретный самородок знаний содержит отсылку ни к кому иному, как к самому Гейбу Ньюэллу из Valve.

Присоединяйтесь к нам в прямом эфире для Windows Central Video Podcast сегодня в 13:30 по восточному времени

Сегодня в 13:30 по восточному времени мы в прямом эфире с подкастом Windows Central Video, обязательно будьте там!

Ознакомьтесь с этими обязательными приложениями Windows для Суперкубка LVI

Суперкубок LVI наконец-то здесь. Чтобы получить наилучшие впечатления от большой игры, обязательно скачайте эти приложения для Windows 11 и Windows 10.

Читайте также: