Hoe Vergelijk je Twee tekstbestanden in de Linux Terminal

0
754
Fatmawati Achmad Zaenuri/Shutterstock.com

Nodig om de verschillen te zien tussen twee versies van een tekst-bestand? Dan diff is de opdracht die je nodig hebt. Deze tutorial laat zien hoe u met diff op Linux en macOS, de gemakkelijke manier.

Duik in diff

Het diff commando vergelijkt twee bestanden en maakt een lijst van de verschillen tussen de twee. Om preciezer te zijn, het produceert een lijst van de wijzigingen die moeten worden gemaakt om het eerste bestand, zodat het overeenkomt met het tweede bestand. Als u dat in gedachten houden je vindt het makkelijker om te begrijpen van de uitvoer van diff. Het commando diff werd ontworpen om de verschillen tussen de source code bestanden en voor het produceren van een uitgang die kan worden gelezen en opgevolgd door andere programma ‘ s, zoals de patch opdracht. In deze tutorial gaan we kijken naar de meest bruikbare van de mens-vriendelijke manieren te gebruiken diff.

Laten we duiken recht in en analyseren van twee bestanden. De volgorde van de bestanden op de commando-regel bepaalt welke file diff beschouwt als de ‘eerste bestand’ en die hij beschouwt als de “tweede bestand.” In het voorbeeld hieronder alpha1 is het eerste bestand, en alpha2 is het tweede bestand. Beide bestanden bevatten de fonetische alfabet, maar het tweede bestand, alpha2, had verder te bewerken, zodat de twee bestanden zijn niet identiek.

We kunnen het vergelijken van de bestanden met deze opdracht. Type diff, een spatie, de naam van het eerste bestand, een spatie, de naam van het tweede bestand, en druk vervolgens op Enter.

diff alpha1 alpha2

Hoe doen we het ontleden van dat vermogen? Als je eenmaal weet wat te zoeken het is niet zo erg. Elk verschil is vermeld op zijn beurt in één kolom en elk verschil wordt aangeduid. Het label bevat nummers aan beide kanten van een letter, zoals 4c4. Het eerste getal is het nummer van de lijn in alpha1, en het tweede getal is het nummer van de lijn in alpha2. De letter in het midden kan worden:

  • c: De lijn in het eerste bestand moet worden aangepast aan de lijn in het tweede bestand.
  • d: De lijn in het eerste bestand moet worden verwijderd om de wedstrijd van het tweede bestand.
  • een: de Extra content moet worden toegevoegd aan het eerste bestand aan zodat het overeenkomt met het tweede bestand.

De 4c4 in ons voorbeeld vertel ons dat de regel vier van alpha1 moet worden aangepast aan line vier van alpha2. Dit is het eerste verschil tussen de twee bestanden die diff gevonden.

Regels die beginnen met < verwijzen naar het eerste bestand, in ons voorbeeld alpha1, en lijnen die beginnen met > die verwijzen naar het tweede bestand, alpha2. De lijn < Delta vertelt ons dat het woord Delta is de inhoud van lijn vier in alpha1. De line > Dave vertelt ons dat het woord Dave is de inhoud van lijn vier in alpha2. Samen te vatten dan, we moeten vervangen Delta met Dave op lijn vier in alpha1, om die lijn match in beide bestanden.

De volgende verandering is aangegeven door de 12c12. Volgens dezelfde logica vertelt ons dat lijn 12 in alpha1 bevat het woord Lima, maar regel 12 van alpha2 bevat het woord Linux.

De derde verandering verwijst naar een regel die is verwijderd van alpha2. Het label 21d20 is ontcijferd als “lijn 21 moet worden verwijderd van de eerste bestand om beide bestanden synchroniseren van lijn 20 vanaf.” De < Uniforme lijn toont ons de inhoud van de regel die moet worden verwijderd van alpha1.

Het vierde verschil is gelabeld 26a26,28. Deze wijziging verwijst naar drie extra regels die zijn toegevoegd aan alpha2. Opmerking de 26,28 in het label. Twee lijnen, getallen, gescheiden door een komma staat voor een bereik van de lijn nummers. In dit voorbeeld is het bereik van de regel 26 regel 28. Het label wordt geïnterpreteerd als ‘ op regel 26 in het eerste bestand, voeg je de lijnen 26 en 28 van het tweede bestand.” We zien drie lijnen in de alpha2 die moeten worden toegevoegd aan alpha1. Deze bevatten de woorden Gril, Vreemd, en Charme.

Snappy Oneliners

Als je alles wat je wilt weten is of de twee bestanden zijn hetzelfde, gebruik je de-s (verslag van identieke bestanden) optie.

diff -s alpha1 alpha3

U kunt gebruik maken van de q (kort) optie om een even korte instructie over twee bestanden zijn verschillend.

diff -q alpha1 alpha2

Een ding om op te letten is dat met twee identieke bestanden-q (kort) optie volledig kokkels tot en rapporteren niet alles op alles.

Alternatief Bekijken

De -y (side by side) optie gebruikt een andere indeling voor het beschrijven van het bestand verschillen. Het is vaak handig gebruik van het -W (breedte) optie met de side by side bekijken, te beperk het aantal kolommen die worden weergegeven. Dit voorkomt lelijke wrap-around lijnen die ervoor zorgen dat de output moeilijk te lezen. Hier hebben we verteld diff voor het produceren van een side by side-display en een beperking van de uitvoer naar 70 kolommen.

diff -y -W 70 alpha1 alpha2

Het eerste bestand op de commando-regel, alpha1, wordt aan de linkerkant weergegeven en op de tweede regel van de command line, alpha2, wordt weergegeven aan de rechterkant. De lijnen van ieder bestand worden weergegeven, naast elkaar. Er zijn indicator tekens langs die lijnen in alpha2 die zijn gewijzigd, verwijderd of toegevoegd.

  • |: Een lijn die is veranderd in het tweede bestand.
  • <: Een lijn die is verwijderd uit het tweede bestand.
  • >: Een lijn die is toegevoegd aan het tweede bestand dat niet in het eerste bestand.

Als u liever een meer compacte side by side samenvatting van het bestand verschillen, gebruik je de –onderdrukken-common-lijnen optie. Deze krachten diff lijst veranderd, toegevoegd of verwijderd lijnen alleen.

diff -y -W 70 –onderdrukken-common-lijnen alpha1 alpha2

Voeg een Splash van Kleur

Een ander programma genaamd colordiff voegt kleur markering om de diff uitvoer. Dit maakt het veel gemakkelijker om te zien welke regels verschillen.

Apt-get gebruiken om deze package installeren op uw systeem als u gebruikmaakt van Ubuntu of een andere Debian-gebaseerde distributie. Op andere Linux distributies, gebruik maken van uw Linux-distributie is de package beheer tool voor in de plaats.

sudo apt-get install colordiff

Gebruik colordiff net zoals u zou doen met diff.

In feite, colordiff is een wrapper voor het vergelijken en diff doet al het werk achter de schermen. Vanwege dat, alle van het diff-opties werken met colordiff.

Het Bieden Van Een Context

Om een aantal te vinden midden tussen alle van de regels in de bestanden op het scherm weergegeven en het hebben van alleen de gewijzigde regels vermeld, kunnen wij vragen diff tot het voorzien in een context. Er zijn twee manieren om dit te doen. Beide manieren bereiken van hetzelfde doel, dat is om te laten zien wat lijnen voor en na elke lijn gewijzigd. U zult in staat zijn om te zien wat er in het bestand op de plaats waar het verschil werd waargenomen.

De eerste methode maakt gebruik van de -c (kopiëren context) optie.

colordiff -c alpha1 alpha2

De diff uitvoer heeft een kop. De header bevat de twee bestandsnamen en hun wijziging keer. Er zijn sterretjes (*) voor de naam van het eerste bestand en streepjes (-) voor de naam van het tweede bestand. Sterretjes en streepjes worden gebruikt om aan te geven welk bestand de regels in de output behoren.

Een lijn van sterretjes met 1,7 in het midden geeft aan dat we kijken naar de lijnen van alpha1. Om precies te zijn, zijn wij op zoek naar lijnen één op de zeven. Het woord Delta is gemarkeerd als gewijzigd. Een uitroepteken ( ! naast het, en het is rood. Er zijn drie lijnen ongewijzigd weergegeven tekst voor en na dat de lijn zodat we kunnen zien in de context van die regel in het bestand.

De lijn van streepjes met 1,7 in het midden vertelt ons dat we nu op zoek naar lijnen van alpha2. Nogmaals, we zijn op zoek naar lijnen met één tot zeven, met het woord Dave op lijn vier gemarkeerd als verschillend.

Drie lijnen van de context boven en onder elke verandering is de standaard waarde. U kunt opgeven hoe veel regels van de context u wilt diff te bieden. Om dit te doen, gebruikt u de-C (kopiëren context) optie met een hoofdletter “C” en geef het aantal lijnen waarop u wilt:

colordiff -C 2 alpha1 alpha2

De tweede diff optie biedt de context is het -u (unified context) optie.

colordiff -u alpha1 alpha2

Zoals eerder, we hebben een kop op de uitgang. De twee bestanden zijn met de naam en wijziging keer worden getoond. Er zijn streepjes (-) voor de naam van alpha1-en plus-teken (+) voor de naam van alpha2. Dit vertelt ons dat de streepjes worden gebruikt om te verwijzen naar alpha1 en plus tekens worden gebruikt om te verwijzen naar de alpha2. Verspreid in de lijst zijn de regels die beginnen met tekenen (@). Deze lijnen markeren het begin van elk verschil. Ze vertellen ons ook welke lijnen zijn te zien van ieder bestand.

We zien drie lijnen voor en na de regel gemarkeerd als verschillend, zodat we kunnen zien in de context van de veranderde regel. In de gezamenlijke visie, de lijnen met het verschil zijn boven elkaar afgebeeld. De lijn van alpha1 is voorafgegaan door een streepje en de lijn van alpha2 is voorafgegaan door een plusteken. Dit scherm bereikt in acht lijnen wat de gekopieerde context display boven duurde vijftien om te doen.

Zoals u zou verwachten, kunnen we vragen diff te geven precies het aantal lijnen van unified context zouden we graag zien. Om dit te doen, gebruikt u de -U (unified context) optie met een hoofdletter “U” en het nummer van de lijnen die u zou willen:

colordiff -U 2 alpha1 alpha2

Het negeren van de Witte Ruimte en Case

Laten we het analyseren van de andere twee bestanden, test4 en test5. Deze hebben de namen zes van de superhelden in hen.

colordiff -y -W 70 test4 test5

De resultaten tonen aan dat diff vindt niets anders met de Zwarte Weduwe, Spider-Man en Thor lijnen. Het doet vlag verandert met de Captain America, iron man en De Hulk lijnen.

Dus wat is er anders? Nou, in test5 Hulk is gespeld met een kleine letter “h” en Captain America heeft een extra spatie tussen de “Kapitein” en “Amerika”. OK, dat is duidelijk te zien, maar wat is er mis met de Ironman lijn? Er zijn geen zichtbare verschillen. Hier is een goede vuistregel. Als u het niet kunt zien, is het antwoord witte ruimte. Er is vrijwel zeker een verdwaalde ruimte of twee, of een tab-teken aan het einde van die lijn.

Als ze niet belangrijk zijn voor u, kunt u opdracht geven diff te negeren, specifieke vormen van lijn verschil, met inbegrip van:

  • -ik: het Negeren van verschillen in de zaak.
  • -Z: Negeren trailing witte ruimte.
  • -b: het Negeren van wijzigingen in het bedrag van de witte ruimte.
  • -w: Negeer alle witte ruimte verandert.

Vraag diff te controleren die twee bestanden opnieuw, maar dit keer om te negeren verschillen in de zaak.

colordiff -i-j-W 70 test4 test5

De lijnen met “De Hulk” en “De hulk” worden nu beschouwd als een wedstrijd, en geen verschil is gemarkeerd voor een kleine letter ‘h’. Vraag diff te negeren trailing witte ruimte.

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

Als vermoed, trailing witte ruimte moet zijn geweest van het verschil op de Ironman lijn, omdat diff niet langer vlaggen een verschil voor die lijn. Dat laat Captain America. Vraag diff te negeren geval en negeer alle witruimte problemen.

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

Door het vertellen van diff te negeren de verschillen die we niet bezorgd over, diff vertelt ons dat het voor onze doeleinden, de bestanden overeenkomen.

Het diff commando heeft vele opties, maar de meeste van hen hebben betrekking op de productie van machine-leesbare output. Deze kunnen worden bekeken op de Linux man-pagina. De opties die we hebben gebruikt in de voorbeelden hierboven zal u toelaten om het opsporen van de verschillen tussen versies van uw bestanden met tekst, met behulp van de commando-regel en de menselijke ogen.