GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So erhalten Sie den Unterschied (nur Ergänzungen) zwischen zwei Dateien in Linux

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

       [...]

Linux
  1. So übertragen Sie Dateien zwischen zwei Computern mit den Befehlen nc und pv

  2. So verwenden Sie den Linux-Befehl find zum Suchen von Dateien

  3. Wie kann ich zwei XML-Dateien unterscheiden?

  4. Wie kann man nur die erste Zeile von zwei Dateien unterscheiden?

  5. Wie erhalte ich die physische Größe einer Datei unter Linux?

Was ist der Unterschied zwischen Linux und Unix?

So zeigen Sie zwei Dateien nebeneinander in Linux an

So vergleichen Sie zwei Dateien im Linux-Terminal

So synchronisieren Sie Dateien automatisch zwischen zwei Linux-Servern

So finden Sie Dateien mit dem fd-Befehl in Linux

Unterschied in Leerzeichen zwischen zwei Dateien unter Linux