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'

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

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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.