Diff, показать измененную строку только из правого файла


24

У меня есть файл, aи bя хотел бы вывести строки, bкоторые были изменены с момента его клонирования a. Только измененные линии, без окружающего контекста, без различий, отметок.

Как я могу сделать это с помощью сценариев оболочки? (Нет Python / Perl / PHP / ...)

Sed и awk являются приемлемыми решениями.

На данный момент я использую --suppress-common-lines и sed, используя обратные ссылки регулярных выражений, чтобы просто получить нужную часть после пробела. Должен быть лучший способ?

Используя perl (что запрещено), я бы сделал что-то вроде этого:

diff -y --suppress-common-lines -W $COLUMNS Eclipse_Preferences_Export_*.epf | perl -pe 's/.*\t|\t(.*)$/\1/g'

Ответы:


34

С пакетом GNU diffutilsdiff это выведет только строки из файла b, которые были либо изменены, либо недавно вставлены:

diff --unchanged-line-format= --old-line-format= --new-line-format='%L' a b

4
Потрясающе. Позор, информация похоронена в Texinfo, и никакой подсказки нет на странице
справки, которую

6

Вы должны добавить еще одну опцию:

grep -vf file1 file2

Хотя это не требует сортировки строк, я думаю, что grep использует намного больше памяти и вылетает для больших файлов.
Шридхар Сарнобат

не работает, если строки дублируются
Jayen

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.