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'
Robottinosino
источник

Ответы:

34

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

diff --unchanged-line-format= --old-line-format= --new-line-format='%L' a b
manatwork
источник
4
Потрясающе. Позор, информация похоронена в Texinfo, и никакой подсказки нет на странице
справки, которую
6

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

grep -vf file1 file2
Шри
источник
Хотя это не требует сортировки строк, я думаю, что grep использует намного больше памяти и вылетает для больших файлов.
Шридхар Сарнобат
не работает, если строки дублируются
Jayen
4
awk 'FNR==NR{old[$0];next};!($0 in old)' old.txt new.txt
1kenthomas
источник