Diff, nur geänderte Zeile aus rechter Datei anzeigen

24

Ich habe eine Datei aund bmöchte Zeilen ausgeben b, die sich seit dem Klonen geändert haben a. Nur die modifizierten Linien, kein umgebender Kontext, keine diff versetzten Markierungen.

Wie kann ich das mit Shell Scripting machen? (Kein Python / Perl / PHP / ...)

Sed und awk sind akzeptable Lösungen.

Im Moment ist das, was ich mache, anders als --suppress-common-lines und sed mit Regex-Rückreferenzen, um nur den richtigen Teil nach dem Whitespace abzurufen. Es muss einen besseren Weg geben?

Mit Perl (was verboten ist) würde ich so etwas machen:

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

Antworten:

34

Mit GNU diffutils- Paketen diffwerden nur Zeilen aus Datei b ausgegeben, die entweder geändert oder neu eingefügt wurden:

diff --unchanged-line-format= --old-line-format= --new-line-format='%L' a b
Mann bei der Arbeit
quelle
4
Genial. Schade, dass die Informationen in der Texinfo vergraben sind und in der Manpage, die ich gerade las, kein Hinweis enthalten ist.
Robottinosino
6

Sie müssen eine weitere Option hinzufügen:

grep -vf file1 file2
Sri
quelle
Dies erfordert zwar nicht, dass die Zeilen sortiert werden, aber ich denke, grep verwendet viel mehr Speicher und stürzt bei großen Dateien ab.
Sridhar Sarnobat
funktioniert auch nicht, wenn Zeilen dupliziert werden
Jayen
4
awk 'FNR==NR{old[$0];next};!($0 in old)' old.txt new.txt
1kenthomas
quelle