next up previous contents index
Next: Kommandoen dircmp Up: Fleire kommandoar til vanleg Previous: Kommandoen cmp

Kommandoen diff

For tekst-filar finst det eit kraftig samanlikningsverktøy som heiter diff  . Dette programmet produserer ein komplett indeks over dei linjene som er forskjellige i dei to filene,- saman med linje-nummer. Programmet rapporterer også kva som skal forandrast for at filane skal bli like.

zevs% cat fil1
Dette er ei kort fil
med berre nokre faa linjer,
heilt enkelt
som vil vise korleis diff fungerer.
zevs% cat fil2
Dette er ei kort fil
med berre nokre faa linjer,
heilt super-enkelt
som vil vise korleis diff fungerer.
zevs% diff fil1 fil2
3c3
< heilt enkelt
--
> heilt super-enkelt
zevs%
Den første delen i utdataene frå diff listar den ut linje-nummer på dei linjene som er forskjellige. Neste linje er linje er frå den første fila markert med <, skille, deretter linja i den andre fila, markert med >. Når filane blir større vil sjølvsagt mengden av utdata auke omtrent proporsjonalt med størrelsen, likevel er diff ganske intelligent og den handterer store forskjellar og ulikt antal linjer. Faktisk vil diff nesten alltid klare å finne den minste mengde av forskjellar mellom to filar. Dersom eit filnamn i kommando-linja er erstatta med - vil diff lese frå standard inn. Vanlegvis vil ekstra mellomrom eller tabuleringar få diff til å markere linjer som forskjellige. Dersom ein brukar opsjonen -w ( whitespace ) vil diff ignorere linjer som berre er forskjellig med omsyn til mellomrom eller tabuleringar. Ein kan også bruke -i ( ignorecase) for å få diff til å handtere store og små tegn likt. Kommandoen kan også lage såkalla ed-makroar for konvertere den første fila til den andre fila. Dersom ein brukar diff med -e-opsjon lagar diff ei makro-fil som kan brukast direkte til å konvertere filane.

zevs% diff -e fil1 fil2
3c
> heilt super-enkelt
.
zevs%
Desse utdataene kan brukast til å konvertere fil1 til fil2,- f.eks slik som dette :

zevs% diff -e fil1 fil2 > ed.makro
zevs% ( cat ed.makro; echo w )  | ed fil1
97
103
zevs% diff fil1 fil2
zevs%
Dette eksemplet inneheld mange idèar,- men eg vil ikkje gå nærare inn på dei i første omgang. Det kan også synes litt rart at ein lagar ein makro for å konvertere ei fil til ei anna når ein berre kan kopiere den. Dette er ikkje ideen bak dette,- det som er tenkt er å distribuere denne makroen som oppgradering av programvare. Dersom ein har kjeldekode ( og det er det vanlege i UNIX-miljø ) så treng ein berre å distribuere ein slik makro for å oppgradere kjeldekoden og kompilere på nytti for å oppgradere programvare. Det vil ta mindre plass enn å distribuere heile filar.
next up previous contents index
Next: Kommandoen dircmp Up: Fleire kommandoar til vanleg Previous: Kommandoen cmp
Trond.Kandal@itea.ntnu.no