Відмінність, показувати модифікований рядок лише з правого файлу


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 diffце буде виводити лише рядки з файлу b, які були або змінені, або знову вставлені:

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

4
Дивовижно. Соромно, що інформація похована в Тексінфо, і жодної підказки не надається на сторінці чоловіка, яку я читав ..
Robottinosino

6

Вам потрібно додати ще один варіант:

grep -vf file1 file2

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

не працює, якщо рядки дублюються
Jayen

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.