Twee tekstbestanden vergelijken met diff op de Mac

Met diff vergelijkt u twee tekstbestanden regel voor regel. De optie -u zet verwijderde en toegevoegde regels bij elkaar, zodat u bijvoorbeeld een gewijzigde configuratie kunt nalopen.

Bekijk de opdrachten in actie 10 seconden

Druk op afspelen: de opdrachten verschijnen letter voor letter. U kunt pauzeren en het beeld vergroten.

Terminalopname: diff toont de gewijzigde regel, gevolgd door afsluitcode 1. De datums horen bij onze oefenbestanden. Het procentteken is de prompt en hoeft u niet te typen.

Stap voor stap

  1. Begin in een nieuwe oefenmap

    Open Terminal en voer deze regel uit met Return. mktemp maakt een nieuwe tijdelijke map; cd gaat er alleen naartoe als dat gelukt is. Gebruik voor de volgende stappen hetzelfde venster.

                werkmap=$(mktemp -d) && cd "$werkmap"
              

    Controle: De prompt keert zonder foutmelding terug. Ga bij een fout niet verder met het maken van bestanden. U werkt nu in een aparte, lege map.

  2. Maak twee kleine tekstbestanden

    Voer beide regels uit in de zojuist gemaakte map. printf schrijft de oefentekst; de tekens backslash-n geven regeleinden aan. Het groter-dan-teken schrijft naar het genoemde bestand.

                printf 'kleur=blauw\nmeldingen=aan\n' > oud.txt
    printf 'kleur=groen\nmeldingen=aan\n' > nieuw.txt
              

    Controle: Er zijn twee bestanden met elk twee regels. Alleen de kleur verschilt. Voer deze voorbereiding niet uit in een bestaande werkmap met gelijknamige bestanden: > overschrijft een bestaand bestand.

  3. Vergelijk oud met nieuw

    Geef eerst het oorspronkelijke bestand op en daarna de nieuwe versie. De optie -u kiest de uniforme weergave met omliggende regels als context.

                diff -u oud.txt nieuw.txt
              

    Controle: U ziet -kleur=blauw en +kleur=groen. De regel meldingen=aan blijft gelijk. diff laat beide bestanden ongewijzigd.

  4. Lees meteen de afsluitcode

    Voer deze regel direct na diff uit, zonder tussendoor een andere opdracht te geven. De shell bewaart in $? de afsluitcode van de vorige opdracht. Neem de aanhalingstekens letterlijk over.

                printf 'Afsluitcode: %s\n' "$?"
              
    De terminal toont Afsluitcode: 1 direct na de vergelijking van de verschillende bestanden.
    De werkelijk gelezen afsluitcode van diff. Een nieuwe opdracht vervangt de vorige afsluitcode.

    Controle: Er verschijnt Afsluitcode: 1. Bij diff betekent dat: er zijn verschillen. Het is hier geen foutmelding.

  5. Vergelijk ter controle hetzelfde bestand

    Voer deze twee regels achter elkaar uit. Dit laat zien hoe een geslaagde vergelijking zonder verschillen eruitziet.

                diff -u oud.txt oud.txt
    printf 'Afsluitcode: %s\n' "$?"
              

    Controle: diff toont geen verschillen en daarna verschijnt Afsluitcode: 0. Uw twee oefenbestanden zijn nog steeds ongewijzigd.

Zo leest u de plus- en minregels

De eerste regel met --- noemt het eerste bestand; +++ noemt het tweede. De datums zijn bestandsgegevens en geen inhoudsverschillen. Daarna begint een blok met @@: daarin staan de betrokken regelnummers en de omvang van het blok voor beide bestanden.

Binnen zo’n blok betekent een minteken dat de regel uit de oude versie verdwijnt; een plusteken betekent dat hij in de nieuwe versie verschijnt. Een regel met een spatie aan het begin is ongewijzigde context. Bij deze oefening leest u dus: vervang blauw door groen en laat de instelling voor meldingen staan. Omgekeerde bestandsvolgorde draait plus en min om.

Het verschil tussen een wijziging en een fout

Afsluitcode Betekenis
0 De vergelijking is voltooid en de bestanden verschillen niet.
1 De vergelijking is voltooid en er zijn verschillen.
Groter dan 1 Er is iets misgegaan. Lees de foutregel, bijvoorbeeld over een ontbrekend bestand.

Wilt u alleen weten óf bestanden verschillen, gebruik dan diff -q oud.txt nieuw.txt. Deze variant meldde in onze oefening dat de bestanden verschillen, zonder alle gewijzigde regels te tonen. Hij gebruikt dezelfde afsluitcodes. In een script moet u code 1 dus niet automatisch behandelen als een mislukte vergelijking.

Uw eigen bestanden vergelijken

Gebruik deze aanpak voor gewone tekst, zoals .txt, .csv of een tekstconfiguratie. Geef de twee echte bestandsnamen op in dezelfde volgorde als in de oefening. Namen met spaties moeten tussen aanhalingstekens. Een Word-document of PDF bestaat niet uit zulke eenvoudige tekstregels; deze tip vergelijkt de opmaak daarvan niet.

Verschillen in regeleinden, spaties of tekencodering kunnen extra wijzigingen opleveren. Bekijk die eerst voordat u opties toevoegt die verschillen verbergen. Om uitsluitend te controleren of een gedownload bestand exact overeenkomt met de verwachte bytes, kunt u een SHA-256-controle uitvoeren.

Bekijk alle tips