Zróżnicowane, pokaż zmodyfikowaną linię tylko z prawego pliku

24

Mam plik ai bchciałbym wypisać wiersze btej zmienionej od czasu sklonowania a. Tylko zmodyfikowane linie, bez otaczającego kontekstu, bez znaczników przesunięcia różnic.

Jak mogę to zrobić za pomocą skryptów powłoki? (Brak Python / Perl / PHP / ...)

Sed i awk są akceptowalnymi rozwiązaniami.

Na razie to, co robię, różni się od --suppress-common-line i sed używa referencji zwrotnych, aby pobrać odpowiednią część po spacji. Musi być lepszy sposób?

Używając perla (co jest zabronione), zrobiłbym coś takiego:

diff -y --suppress-common-lines -W $COLUMNS Eclipse_Preferences_Export_*.epf | perl -pe 's/.*\t|\t(.*)$/\1/g'
Robottinosino
źródło

Odpowiedzi:

34

W przypadku pakietu diffutils GNU spowodujediff to wyświetlenie tylko wierszy z pliku b, które zostały zmodyfikowane lub nowo wstawione:

diff --unchanged-line-format= --old-line-format= --new-line-format='%L' a b
człowiek w pracy
źródło
4
Niesamowite. Szkoda, że ​​informacja została pochowana w Texinfo i nie ma podpowiedzi na stronie podręcznika, którą czytałem ..
Robottinosino,
6

Musisz dodać jeszcze jedną opcję:

grep -vf file1 file2
Sri
źródło
Chociaż nie wymaga to sortowania linii, myślę, że grep zużywa dużo więcej pamięci i ulega awarii dla dużych plików.
Sridhar Sarnobat
nie działa, jeśli wiersze są również zduplikowane
Jayen
4
awk 'FNR==NR{old[$0];next};!($0 in old)' old.txt new.txt
1kenthomas
źródło