Hur man Jämför Två Text-Filer i Linux Terminal

0
509
Fatmawati Achmad Zaenuri/Shutterstock.kom

Behovet av att se skillnaderna mellan två versioner av en text-fil? Då diff är det kommando du behöver. Denna handledning visar dig hur du använder diff på Linux och macOS, på ett enkelt sätt.

Dykning i diff

Diff-kommandot jämför två filer och resulterar i en förteckning över skillnaderna mellan de två. För att vara mer exakt, det resulterar i en förteckning över de förändringar som skulle behöva göras för att den första filen, så att det matchar den andra filen. Om du håller detta i åtanke kommer du att finna det lättare att förstå produktionen från diff. Diff-kommandot var utformad för att hitta skillnader mellan källkodsfiler och att producera en output som kan läsas och påverkas av andra program, såsom patch kommando. I den här guiden, vi kommer att titta på de mest användbara människa-vänliga sätt att använda diff.

Låt oss dyka rätt in och analysera två filer. Den ordning av filerna på kommandoraden avgör vilken fil diff anser vara den “första fil” och som den anser vara “den andra filen.” I exemplet nedan alpha1 är den första filen, och alfa2 är den andra filen. Båda filerna innehåller fonetiska alfabetet men den andra filen, alfa2, har haft några ytterligare redigering så att de två filerna är inte identiska.

Vi kan jämföra filer med det här kommandot. Typ diff, ett mellanslag, namnet på den första filen, ett mellanslag, namnet på den andra filen, och tryck sedan på Enter.

diff alpha1 alfa2

Hur ska vi dissekera att produktionen? När du vet vad du ska leta för det är inte så illa. Varje skillnaden är noterade i sin tur i en enda kolumn, och varje skillnad som märks. Etiketten innehåller numren på vardera sidan av ett brev, som 4c4. Den första siffran är det radnummer i alpha1, och den andra siffran är den linje nummer i alfa2. Bokstaven i mitten kan vara:

  • c: Den här raden i den första filen som behöver ändras för att matcha linjen i den andra filen.
  • d: Den här raden i den första filen måste tas bort för att matcha den andra filen.
  • ett: för Extra innehåll måste läggas till den första filen så att det matchar den andra filen.

Den 4c4 i vårt exempel berätta för oss att linje fyra av alpha1 måste ändras för att matcha linje fyra av alfa2. Detta är den första skillnaden är mellan de två filerna som diff som finns.

Rader som börjar med < hänvisar till den första filen, i vårt exempel alpha1, och rader som börjar med > hänvisa till andra filen, alfa2. Raden < Delta berättar att ordet Delta är innehållet i linje fyra i alpha1. Linjen > Dave berättar att ordet Dave är innehållet i linje fyra i alfa2. För att sammanfatta så måste vi ersätta Delta med Dave på linje fyra i alpha1, för att göra raden match i båda filerna.

Nästa förändring indikeras av 12c12. Att tillämpa samma logik, det säger oss att linje 12 i alpha1 innehåller ordet Lima, men linje 12 i alfa2 innehåller ordet Linux.

Den tredje förändringen avser en linje som har tagits bort från alfa2. Etiketten 21d20 är att tyda som “linje 21 måste utgå från den första filen att göra både synkronisera filer från linje 20 och framåt.” < Enhetlig linje visar innehållet i den linje som behöver tas bort från alpha1.

Den fjärde skillnaden är märkt 26a26,28. Denna förändring hänvisar till tre extra rader som har lagts till alfa2. Observera 26,28 i etiketten. Två rad siffror som skiljs åt med ett kommatecken representerar ett urval av radnummer. I detta exempel, är från linje 26 till linje 28. Etiketten kommer att tolkas som “på rad 26 i den första filen, lägg till rader 26 till 28 från den andra filen.” Vi visar de tre linjerna i alfa2 som behöver läggas till alpha1. Dessa innehåller de ord Sarkasm, Konstigt och Charm.

Snärtiga One-Liners

Om du allt du vill veta är om två filer är likadana, använd-s (rapport identiska filer) alternativ.

diff -s alpha1 alpha3

Du kan använda-q (kort) möjlighet att få en lika bryskt uttalande om två filer för att vara annorlunda.

diff -q alpha1 alfa2

En sak att se upp för är att med två identiska filer-q (kort) alternativet helt musslor upp och säger att du inte har någonting alls.

En Alternativ Syn

-Y (sida vid sida) alternativet använder en annan layout för att beskriva filen skillnader. Det är ofta praktiskt att använda den -W (bredd) alternativ med sida vid sida, och för att begränsa det antal kolumner som visas. Detta gör att du undviker fula wrap-runt linjer att göra produktionen svåra att läsa. Här har vi berättade diff för att producera en side by side-display och att begränsa produktionen till 70 kolumner.

diff -y -W 70 alpha1 alfa2

Den första filen på kommandoraden, alpha1, visas på den vänstra och den andra raden på kommandoraden, alfa2, visas i den högra. Rader från varje fil visas i, sida vid sida. Det är indikator för tecken längs dessa linjer i alfa2 som har ändrats, tagits bort eller lagts till.

  • |: En linje som har ändrats i den andra filen.
  • <: En linje som har tagits bort från den andra filen.
  • >: En linje som har lagts till den andra fil som inte är i den första filen.

Om du föredrar en mer kompakt sida vid sida sammanfattning av filen skillnader, använd –undertrycka gemensamma linjer alternativ. Detta tvingar diff för att lista ändras, läggas till eller tas bort rader bara.

diff -y -W 70 –undertrycka gemensamma linjer alpha1 alfa2

Lägg till ett Stänk av Färg

Ett annat verktyg som heter colordiff lägger färgmarkeringen för diff-utmatning. Detta gör det mycket lättare att se vilka rader som har skillnader.

För att använda apt-get för att installera detta paket på ditt system om du använder Ubuntu eller annan Debian-baserad distribution. På andra Linux-distributioner, använda din Linux-distribution är pakethanteringsverktyget istället.

sudo apt-get install colordiff

Använd colordiff precis som du skulle använda diff.

I själva verket, colordiff är en wrapper för diff, och diff gör allt arbete bakom kulisserna. På grund av att alla diff alternativ kommer att arbeta med colordiff.

Ge Lite Bakgrund

Att hitta någon medelväg mellan att ha alla linjer i filer som visas på skärmen och med endast ändrade linjer anges, kan vi be diff för att ge lite bakgrund. Det finns två sätt att göra detta. Båda sätt att uppnå samma syfte, som är att visa några rader före och efter varje ändrad rad. Du kommer att kunna se vad som händer i filen på den plats där skillnaden var upptäckta.

I den första metoden används -c (kopieras sammanhang) alternativ.

colordiff -c alpha1 alfa2

Diff-utmatning har en rubrik. Sidhuvud listor två filnamn och deras modifiering gånger. Det finns en asterisk (*) framför namnet på den första filen och bindestreck (-) före namnet på den andra filen. Stjärnor och streck kommer att användas för att ange vilken fil raderna i produktionen tillhör.

En rad asterisker med 1,7 i mitten visar vi tittar på linjer från alpha1. För att vara exakt, vi tittar på linjerna ett till sju. Ordet Delta är flaggad som förändrad. Det har ett utropstecken ( ! ), vid sidan av den, och den är röd. Det finns tre rader med oförändrad text som visas före och efter den linjen så att vi kan se ramen för den raden i filen.

Raden av bindestreck med 1,7 i mitten talar om för oss att vi nu tittar på linjer från alfa2. Återigen, vi tittar på linjerna ett till sju, med ordet Dave på linje fyra flaggas som olika.

Tre rader sammanhang ovan och under varje förändring är det förvalda värdet. Du kan ange hur många rader sammanhang du vill diff att ge. För att göra detta, använd-C (kopieras sammanhang) i alternativet med ett stort “C” och ange det antal linjer som du vill:

colordiff -C 2 alpha1 alfa2

Den andra diff alternativ som erbjuder sammanhanget är -u (unified sammanhang) alternativ.

colordiff -u alpha1 alfa2

Som innan, vi har en header på produktionen. De två filerna är namngivna, och deras modifiering tider visas. Det finns bindestreck (-) före namnet på alpha1 och plustecken (+) före namnet på alfa2. Detta berättar för oss att han kommer att användas för att hänvisa till alpha1 och plus-tecken kommer att användas för att hänvisa till alfa2. Spridda över hela notering är rader som börjar med at-tecken (@). De här raderna markera början på varje skillnad. De säger oss också vilka linjer som visas från varje fil.

Vi visas tre rader före och efter raden markeras som är annorlunda, så att vi kan se ramen för den ändrade linje. I enhetlig uppfattning linjer med den skillnaden att visas, en ovanför den andra. Linjen från alpha1 föregås av ett bindestreck och linje från alfa2 föregås av ett plustecken. Denna display uppnår i åtta rader vad den kopierade sammanhang displayen ovanför tog femton att göra.

Som du förväntar dig, kan vi be diff för att ge exakt antal rader enhetligt sammanhang skulle vi vilja se. För att göra detta, använd-U (unified sammanhang) alternativ med stort “U” och ange det antal linjer som du vill:

colordiff -U 2 alpha1 alfa2

Ignorera Vitt Utrymme och Fall

Låt oss analysera en annan två filer, test4 och test5. Dessa har namnen på sex av superhjältar i dem.

colordiff -y -W 70 test4 test5

Resultaten visar att diff finner ingenting annorlunda med den Svarta Änkan, Spider-Man och Thor linjer. Det gör flagga upp förändringar med Captain America, Ironman, och Hulk linjer.

Så vad är annorlunda? Tja, i test5 Hulk stavas med gement “h” och Captain America har ett extra mellanslag mellan “Kapten” och “Amerika”. OK, det är enkelt att se, men vad är det för fel med Ironman linje? Det finns inga synliga skillnader. Här är en bra tumregel. Om du inte kan se det, svaret är “white space”. Det är nästan säkert en herrelös utrymme eller två, eller ett tab-tecken vid slutet av raden.

Om de inte spelar någon roll för du, du kan instruera diff att ignorera vissa typer av linje skillnad, inklusive:

  • -jag: Ignorera skillnader i fallet.
  • -Z: Ignorera avslutande blanksteg.
  • -b: Ignorera ändringarna i mängden vitt utrymme.
  • -w: Ignorera alla vita utrymme för förändringar.

Låt oss be diff för att kontrollera dessa två filer igen, men denna gång för att ignorera alla skillnader i fallet.

colordiff -i-y -W 70 test4 test5

Raderna med “Hulk” och “The hulk” är nu anses vara en match, och ingen skillnad har flaggats för gement “h”. Låt oss be diff också ignorera avslutande blanksteg.

colordiff -i-Z -y -W 70 test4 test5

Som misstänkt, avslutande blanksteg måste ha varit skillnaden på Ironman line eftersom diff inte längre flaggor skillnad för den linjen. Som lämnar Captain America. Låt oss be diff att ignorera fallet och att ignorera alla vita utrymme för frågor.

colordiff -i-w -y -W 70 test4 test5

Genom att berätta diff att bortse från de skillnader som vi inte orolig, diff berättar att, för våra syften, de filer som matchar.

Diff-kommandot har många fler alternativ, men de flesta av dem gäller att producera maskinläsbara utgång. Dessa kan ses på Linux-man-sidan. De alternativ vi har att användas i exemplen ovan kommer att göra det möjligt för dig att spåra upp alla skillnader mellan olika versioner av din text filer, använda kommandoraden och mänskliga ögon.