Как я могу заставить diff показывать только добавленные и удаленные строки? Если diff не может этого сделать, какой инструмент может?
command-line-interface
diff
Пересекать
источник
источник
diff A B | grep '^[<>]'
comm
.Ответы:
Попробуй комм
Еще один способ взглянуть на это:
Показать строки, которые существуют только в файле a: (то есть, что было удалено из a)
Показать строки, которые существуют только в файле b: (то есть, что было добавлено в b)
Показать строки, которые существуют только в одном или другом файле: (но не оба)
(Предупреждение: если в файле
a
есть строки, начинающиеся с TAB, он (первый TAB) будет удален из выходных данных.)Только отсортированные файлы
ПРИМЕЧАНИЕ. Оба файла должны быть отсортированы для
comm
правильной работы. Если они еще не отсортированы, вы должны отсортировать их:Если файлы очень длинные, это может быть довольно обременительным, поскольку требует дополнительной копии и, следовательно, вдвое больше дискового пространства.
источник
comm -12 <(sort a) <(sort b)
comm
может делать то, что вы хотите. С его справочной страницы:Эти столбцы подавляются с
-1
,-2
и-3
соответственно.Пример:
И если вы просто хотите уникальные строки и не волнует, в каком файле они находятся:
Как говорится в справочной странице, файлы должны быть отсортированы заранее.
источник
Чтобы показать добавления и удаления без контекста, номера строк, +, -, <,>! и т.д., вы можете использовать diff следующим образом:
Например, даны два файла:
a.txt
b.txt
Следующая команда покажет строки, удаленные из a или добавленные в b:
выход:
Эта немного другая команда покажет строки, удаленные из .txt:
выход:
Наконец, эта команда покажет строки, добавленные в .txt
выход
источник
Это то, что делает diff по умолчанию ... Может быть, вам нужно добавить несколько флагов, чтобы игнорировать пробелы?
следует игнорировать пустые строки и различное количество пробелов.
источник
Нет, на
diff
самом деле не показывает различия между двумя файлами так, как можно подумать. Он создает последовательность команд редактирования для инструмента, которыйpatch
можно использовать для изменения одного файла в другой.Сложность любой попытки сделать то, что вы ищете, состоит в том, как определить, что представляет собой линию, которая изменилась, по сравнению с удаленной, за которой следует добавленная. Также, что делать, когда строки добавляются, удаляются и меняются рядом друг с другом.
источник
diff
источники, но я, кажется, помню все виды вращений, чтобы отслеживать, где два файла совпадают, чтобы оставаться синхронизированными, и я думаю, что есть предел для отказа в зависимости от того, как далеко друг от друга линии есть. Но я не помню ни одного совпадения внутри строки, кроме (необязательно) свернутого пробела или игнорирования регистра. Или (возможно) слова на это влияют. В любом случае, это все,patch
и vgrep просто приходит на прогулку. Может быть. Во вторник.Инструменты визуального сравнения объединяют два файла, так что сегмент с одинаковым количеством строк, но разным содержанием будет считаться измененным сегментом. Полностью новые линии между совпадающими сегментами считаются добавленными сегментами.
Так же работает инструмент командной строки sdiff , который показывает параллельное сравнение двух файлов в терминале. Измененные строки разделены | характер. Если строка существует только в файле A, <используется как символ-разделитель. Если строка существует только в файле B,> используется в качестве разделителя. Если в файлах нет символов <и>, вы можете использовать это для отображения только добавленных строк:
источник
Спасибо senarvi, ваше решение (за которое не голосовали) фактически дало мне ТОЧНО то, что я хотел, после того, как искал целую вечность на тонне страниц.
Используя ваш ответ, вот что я придумал, чтобы получить список вещей, которые были изменены / добавлены / удалены. В этом примере используются 2 версии файла / etc / passwd и выводится имя пользователя для соответствующих записей.
источник
Я нахожу эту конкретную форму часто полезной:
Пример:
Выход:
Таким образом, он показывает старые строки с,
-
за которыми сразу следует соответствующая новая строка с+
.Если бы мы удалили
C
:это выглядит так:
Формат задокументирован по адресу
man diff
:а также:
а также:
Похожий вопрос: https://stackoverflow.com/questions/15384818/how-to-get-the-difference-only-additions-between-two-files-in-linux
Проверено в Ubuntu 18.04.
источник
File1:
File2:
Использование:
Это показывает две колонки для соответствующих файлов.
Выход:
источник