diff
und dann grep
für den gewünschten Bearbeitungstyp.
diff -u A1 A2 | grep -E "^\+"
Ein ähnlicher Ansatz wie https://stackoverflow.com/a/15385080/337172, aber hoffentlich verständlicher und einfacher zu optimieren:
diff \
--new-line-format="%L" \
--old-line-format="" \
--unchanged-line-format="" \
A1 A2
Das meiste des Folgenden wurde direkt aus der serverfault-Antwort von @TomOnTime hier kopiert. Unten ist ein Versuch, der mit unsortierten Dateien funktioniert, aber der Befehl sortiert die Dateien, bevor er den Unterschied gibt, so dass es in vielen Fällen nicht das ist, was gewünscht wird. Für gut formatierte Diffs unsortierter Dateien finden Sie die anderen Antworten möglicherweise nützlicher (danke an @Fritz für den Hinweis):
Zeilen anzeigen, die nur in Datei a vorhanden sind:(d. h. was aus a gelöscht wurde)
comm -23 a b
Zeilen anzeigen, die nur in Datei b vorhanden sind:(d. h. was zu b hinzugefügt wurde)
comm -13 a b
Zeilen anzeigen, die nur in der einen oder anderen Datei existieren:(aber nicht in beiden)
comm -3 a b | sed 's/^\t//'
(Achtung:Wenn die Datei a
Zeilen hat, die mit TAB beginnen, wird es (das erste TAB) aus der Ausgabe entfernt.)
HINWEIS:Beide Dateien müssen sortiert werden, damit "comm" richtig funktioniert. Wenn sie noch nicht sortiert sind, sollten Sie sie sortieren:
sort <a >a.sorted
sort <b >b.sorted
comm -12 a.sorted b.sorted
Wenn die Dateien sehr lang sind, kann dies eine ziemliche Belastung sein, da eine zusätzliche Kopie und damit doppelt so viel Speicherplatz benötigt wird.
Bearbeiten:Beachten Sie, dass der Befehl mithilfe der Prozessersetzung präziser geschrieben werden kann (danke an @phk für den Kommentar):
comm -12 <(sort < a) <(sort < b)
Sie können dies versuchen
diff --changed-group-format='%>' --unchanged-group-format='' A1 A2
Die Optionen sind in man diff
dokumentiert :
--GTYPE-group-format=GFMT
format GTYPE input groups with GFMT
und:
LTYPE is 'old', 'new', or 'unchanged'.
GTYPE is LTYPE or 'changed'.
und:
GFMT (only) may contain:
%< lines from FILE1
%> lines from FILE2
[...]