Twee tekstbestanden vergelijken met diff op de Mac

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

Bekijk de opdrachten in actie 10 seconden

Druk op afspelen: de opdrachten verschijnen letter voor letter. Je 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 hoef je 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"
              

    Dit zie je: De prompt keert zonder foutmelding terug. Ga bij een fout niet verder met het maken van bestanden. Je 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
              

    Dit zie je: 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
              

    Dit zie je: Je 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.
    Afsluitcode 1 betekent bij diff dat de bestanden verschillen. Een volgende opdracht vervangt deze code.

    Dit zie je: 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' "$?"
              

    Dit zie je: diff toont geen verschillen en daarna verschijnt Afsluitcode: 0. Je twee oefenbestanden zijn nog steeds ongewijzigd.

Zo lees je 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 lees je 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.

Wil je alleen weten óf bestanden verschillen, gebruik dan diff -q oud.txt nieuw.txt. Deze variant meldt of de bestanden verschillen, zonder alle gewijzigde regels te tonen. Hij gebruikt dezelfde afsluitcodes. In een script moet je code 1 dus niet automatisch behandelen als een mislukte vergelijking.

Je 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 je opties toevoegt die verschillen verbergen. Om uitsluitend te controleren of een gedownload bestand exact overeenkomt met de verwachte bytes, kun je een SHA-256-controle uitvoeren.

Bekijk alle tips