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.
Stap voor stap
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.
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.txtControle: 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.
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.txtControle: U ziet -kleur=blauw en +kleur=groen. De regel meldingen=aan blijft gelijk. diff laat beide bestanden ongewijzigd.
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 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.
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.
