Android

Diff-opdracht in Linux

Linux diff command summary with examples

Linux diff command summary with examples

Inhoudsopgave:

Anonim

diff is een opdrachtregelprogramma waarmee u twee bestanden regel voor regel kunt vergelijken. Het kan ook de inhoud van mappen vergelijken.

Het diff commando wordt meestal gebruikt om een ​​patch te maken met de verschillen tussen een of meer bestanden die kunnen worden toegepast met het patch commando.

Hoe het diff commando te gebruiken

De syntaxis voor het diff commando is als volgt:

diff… FILES

Met het diff commando kan de uitvoer in verschillende formaten worden weergegeven, waarbij de normale, context- en uniforme indeling de meest voorkomende is. De uitvoer bevat informatie over welke regels in de bestanden moeten worden gewijzigd zodat ze identiek worden. Als de bestanden overeenkomen, wordt er geen uitvoer geproduceerd.

Gebruik de omleidingsoperator om de opdrachtuitvoer in een bestand op te slaan:

diff file1 file2 > patch

, zullen we de volgende twee bestanden gebruiken om uit te leggen hoe de opdracht diff werkt:

file1

Ubuntu Arch Linux Debian CentOS Fedora bestand2

Kubuntu Ubuntu Debian Arch Linux Centos Fedora

Normaal formaat

In de eenvoudigste vorm wanneer het diff commando zonder twee opties op twee tekstbestanden wordt uitgevoerd, produceert het een uitvoer in het normale formaat:

diff file1 file2

De uitvoer ziet er ongeveer zo uit:

0a1 > Kubuntu 2d2 < Arch Linux 4c4, 5 < CentOS --- > Arch Linux > Centos

Het normale uitvoerformaat bestaat uit een of meer secties die de verschillen beschrijven. Elke sectie ziet er zo uit:

change-command < from-file-line… --- > to-file-line…

0a1 , 2d2 en 4c4, 5 zijn wijzigingscommando's. Elk wijzigingscommando bevat het volgende, van links naar rechts:

  • Het regelnummer of het aantal regels in het eerste bestand. Een speciaal wijzigingsteken. Het regelnummer of het aantal regels in het tweede bestand.

Het wijzigingsteken kan een van de volgende zijn:

  • a - Voeg de lijnen toe. c - Wijzig de lijnen. d - Verwijder de lijnen.

De opdracht wijzigen wordt gevolgd door de volledige regels die worden verwijderd ( < ) en toegevoegd aan het bestand ( > ).

Laten we de output uitleggen:

  • 0a1 - Voeg regel 1 van het tweede bestand toe aan het begin van bestand1 (na regel 0 ).
    • > Kubuntu - De regel van de tweede regel die wordt toegevoegd aan het eerste bestand zoals hierboven beschreven.
    2d2 - Verwijder regel 2 in het eerste bestand. De 2 achter het symbool d betekent dat als de regel niet wordt verwijderd, deze op regel 2 in het tweede bestand verschijnt.
    • < Arch Linux - de verwijderde regel.
    4c4, 5 - Vervang (verander) regel 5 in het eerste bestand door regels 4-5 uit het tweede bestand.
    • < CentOS - De regel in het eerste bestand dat moet worden vervangen. --- - Separator. > Arch Linux en > Centos - Lijnen uit het tweede bestand die de lijn in het eerste bestand vervangen.

Contextindeling

Wanneer het contextuitvoerformaat wordt gebruikt, geeft de opdracht diff verschillende regels context weer rondom de regels die verschillen tussen de bestanden.

De optie -c vertelt diff om uitvoer te produceren in de contextindeling:

diff -c file1 file2

*** file1 2019-11-25 21:00:26.422426523 +0100 --- file2 2019-11-25 21:00:36.342231668 +0100 *************** *** 1, 6 **** Ubuntu - Arch Linux Debian ! CentOS Fedora --- 1, 7 ---- + Kubuntu Ubuntu Debian ! Arch Linux ! Centos Fedora

De uitvoer begint met de namen en de tijdstempels als de bestanden die worden vergeleken, en een of meer secties die de verschillen beschrijven. Elke sectie ziet er zo uit:

*************** *** from-file-line-numbers **** from-file-line… --- to-file-line-numbers ---- to-file-line…

  • from-file-line-numbers en to-file-line-numbers - respectievelijk de regelnummers of door komma's gescheiden regels in het eerste en tweede bestand. from-file-line en to-file-line - De regels die verschillen en de contextregels:
    • Lijnen die beginnen met twee spaties zijn contextregels, de lijnen die in beide bestanden hetzelfde zijn. Lijnen die met het minteken ( - ) beginnen, zijn de lijnen die met niets in het tweede bestand overeenkomen. Lijnen die ontbreken in het tweede bestand. Lijnen die beginnen met het plusteken ( + ) zijn de lijnen die met niets in het eerste bestand overeenkomen. Lijnen die ontbreken in het eerste bestand. Lijnen die beginnen met het uitroepteken ( ! ) Zijn de lijnen die tussen twee bestanden worden gewijzigd. Elke groep lijnen begint met ! uit het eerste bestand heeft een overeenkomstige overeenkomst in het tweede bestand.

Laten we de belangrijkste delen van de uitvoer toelichten:

  • In dit voorbeeld hebben we slechts één sectie die de verschillen beschrijft. *** 1, 6 **** en --- 1, 7 ---- vertelt ons het bereik van de regels van de eerste en tweede bestanden die zijn opgenomen in deze sectie. Lijnen Ubuntu , Debian , Fedora en de laatste lege regel is hetzelfde in beide bestanden. Deze regels beginnen met dubbele spatie. Lijn - Arch Linux uit het eerste bestand komt met niets in het tweede bestand overeen. Hoewel deze regel ook voorkomt in het tweede bestand, verschillen de posities. Line + Kubuntu van het tweede bestand komt met niets in het eerste bestand overeen. Line ! CentOS ! CentOS van het eerste bestand en lijnen ! Arch Linux ! Arch Linux en ! CentOS ! CentOS uit het tweede bestand worden tussen de bestanden gewijzigd.

Standaard is het aantal contextregels standaard drie. Gebruik de optie -C ( --contexts ) om een ​​ander nummer op te geven:

diff -C 1 file1 file2

*** file1 2019-11-25 21:00:26.422426523 +0100 --- file2 2019-11-25 21:00:36.342231668 +0100 *************** *** 1, 5 **** Ubuntu - Arch Linux Debian ! CentOS Fedora --- 1, 6 ---- + Kubuntu Ubuntu Debian ! Arch Linux ! Centos Fedora

Uniforme indeling

Het uniforme uitvoerformaat is een verbeterde versie van het contextformaat en produceert een kleinere uitvoer.

Gebruik de optie -u om diff te laten weten dat de uitvoer in het uniforme formaat moet worden afgedrukt:

diff -u file1 file2

--- file1 2019-11-25 21:00:26.422426523 +0100 +++ file2 2019-11-25 21:00:36.342231668 +0100 @@ -1, 6 +1, 7 @@ +Kubuntu Ubuntu -Arch Linux Debian -CentOS +Arch Linux +Centos Fedora

De uitvoer begint met de namen en de tijdstempels van de bestanden en een of meer secties die de verschillen beschrijven. Elke sectie heeft de volgende vorm:

*************** @@ from-file-line-numbers to-file-line-numbers @@ line-from-files…

  • @@ from-file-line-numbers to-file-line-numbers @@ - Het regelnummer of bereik van de regels van de eerste en tweede bestanden in deze sectie. line-from-files - De regels die verschillen en de contextregels:
    • Lijnen die beginnen met twee spaties zijn contextregels, de lijnen die hetzelfde zijn in beide bestanden. Lijnen die beginnen met het minteken ( - ) zijn de lijnen die worden verwijderd uit het eerste bestand. Lijnen die beginnen met het plusteken ( + ) zijn de regels die worden toegevoegd vanuit het eerste bestand.

Negeer zaak

Zoals u in de bovenstaande voorbeelden kunt zien, is de opdracht diff standaard standaard hoofdlettergevoelig.

Gebruik de optie -i om diff te vertellen dat het geval moet worden genegeerd:

diff -ui file1 file2

--- file1 2019-11-25 21:00:26.422426523 +0100 +++ file2 2019-11-25 21:00:36.342231668 +0100 @@ -1, 6 +1, 7 @@ +Kubuntu Ubuntu -Arch Linux Debian +Arch Linux CentOS Fedora

Conclusie

Het vergelijken van tekstbestanden op verschillen is een van de meest voorkomende taken voor Linux-systeembeheerders.

Het diff commando vergelijkt bestanden regel voor regel. Typ man diff in uw terminal voor meer informatie.

diff terminal