Android

Diff kommando i Linux

Linux команда diff - команда сравнения текстовых файлов.

Linux команда diff - команда сравнения текстовых файлов.

Innehållsförteckning:

Anonim

diff är ett kommandoradsverktyg som låter dig jämföra två filer rad för rad. Det kan också jämföra innehållet i kataloger.

diff kommandot används oftast för att skapa en patch som innehåller skillnaderna mellan en eller flera filer som kan tillämpas med patch kommandot.

Hur man använder diff kommandot

Syntaxen för diff kommandot är enligt följande:

diff… FILES

diff kommandot kan visa utdata i flera format med normal, kontext och enhetligt format som det vanligaste. Utgången innehåller information om vilka rader i filerna som måste ändras så att de blir identiska. Om filerna matchar, produceras ingen utgång.

För att spara kommandoutdata i en fil använder du omdirigeringsoperatören:

diff file1 file2 > patch

, använder vi följande två filer för att förklara hur diff kommandot fungerar:

fil1

Ubuntu Arch Linux Debian CentOS Fedora fil2

Kubuntu Ubuntu Debian Arch Linux Centos Fedora

Normalt format

I sin enklaste form när diff kommandot körs på två textfiler utan något alternativ producerar det en utgång i normalt format:

diff file1 file2

Utgången ser ut så här:

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

Det normala utgångsformatet består av en eller flera sektioner som beskriver skillnaderna. Varje avsnitt ser ut så här:

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

0a1 , 2d2 och 4c4, 5 är ändringskommandon. Varje ändringskommando innehåller följande, från vänster till höger:

  • Radnumret eller radintervallet i den första filen.Et speciellt ändringstecken. Radnumret eller radintervallet i den andra filen.

Ändringstecken kan vara ett av följande:

  • a - Lägg till raderna. c - Ändra raderna. d - Radera raderna.

Ändringskommandot följs av de kompletta raderna som tas bort ( < ) och läggs till i filen ( > ).

Låt oss förklara produktionen:

  • 0a1 - Lägg till rad 1 i den andra filen i början av filen1 (efter raden 0 ).
    • > Kubuntu - Linjen från den andra raden som läggs till i den första filen som beskrivs ovan.
    2d2 - Radera rad 2 i den första filen. Symbolen 2 efter d betyder att om linjen inte raderas skulle den visas på rad 2 i den andra filen.
    • < Arch Linux - den raderade raden.
    4c4, 5 - Ersätt (ändra) rad 5 i den första filen med rader 4-5 från den andra filen.
    • < CentOS - Raden i den första filen som ska ersättas. --- - Separator. > Arch Linux och > Centos - Linjer från den andra filen som ersätter raden i den första filen.

Kontextformat

När kontextutmatningsformatet används visar diff kommandot flera rader med sammanhang runt raderna som skiljer sig mellan filerna.

Alternativet -c berättar för diff att producera output i kontextformatet:

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

Utgången börjar med namnen och tidsstämplarna om de filer som jämförs, och en eller flera sektioner som beskriver skillnaderna. Varje avsnitt ser ut så här:

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

  • from-file-line-numbers och to-file-line-numbers - Linjenumren eller kommaseparerade radintervall i respektive första och andra fil. from-file-line och to-file-line - Raderna som skiljer sig och raderna i sammanhanget:
    • Linjer som börjar med två mellanslag är kontektslinjer, linjerna som är desamma i båda filerna. Linjer som börjar med minussymbolen ( - ) är de linjer som inte motsvarar något i den andra filen. Rader som saknas i den andra filen. Linjer som börjar med plussymbolen ( + ) är de rader som inte motsvarar något i den första filen. Rader som saknas i den första filen. Linjer som börjar med utropstecknet ( ! ) Är raderna som ändras mellan två filer. Varje grupp rader som börjar med ! från den första filen har en motsvarande matchning i den andra filen.

Låt oss förklara de viktigaste delarna av produktionen:

  • I det här exemplet har vi bara ett avsnitt som beskriver skillnaderna. *** 1, 6 **** och --- 1, 7 ---- berättar för oss raderna från de första och andra filerna som ingår i detta avsnitt. Linjer Ubuntu , Debian , Fedora och sista tomma raden är desamma i båda filerna. Dessa rader börjar med dubbelutrymme. Linje - Arch Linux från den första filen motsvarar ingenting i den andra filen. Även om denna rad också finns i den andra filen, är positionerna olika.Line + Kubuntu från den andra filen motsvarar ingenting i den första filen.Line ! CentOS ! CentOS från den första filen och raderna ! Arch Linux ! Arch Linux och ! CentOS ! CentOS från den andra filen ändras mellan filerna.

Som standard är antalet sammanhangslinjer standardvärde till tre. För att ange ett annat nummer använder --contexts alternativet -C ( --contexts ):

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

Unified Format

Det enhetliga utgångsformatet är en förbättrad version av kontextformatet och ger en mindre utgång.

Använd alternativet -u att berätta för diff att skriva ut utskriften i det enhetliga formatet:

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

Utmatningen börjar med namnen och tidsstämplarna för filerna och en eller flera sektioner som beskriver skillnaderna. Varje avsnitt har följande form:

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

  • @@ from-file-line-numbers to-file-line-numbers @@ - Linjenumret eller raden för raderna från de första och andra filerna som ingår i detta avsnitt. line-from-files - Raderna som skiljer sig och raderna i sammanhanget:
    • Linjer som börjar med två mellanslag är kontektslinjer, linjerna som är desamma i båda filerna. Linjer som börjar med minussymbolen ( - ) är linjerna som tas bort från den första filen. Linjer som börjar med plussymbolen ( + ) är raderna som läggs till från den första filen.

Ignorera fall

Som du kanske märker i exemplen ovan är diff kommandot som versaler känsligt med versaler som standard.

Använd alternativet -i att berätta diff till ignorerar fall:

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

Slutsats

Jämförelse av textfiler för skillnader är en av de vanligaste uppgifterna för Linux-systemadministratörer.

diff kommandot jämför filer rad för rad. För mer information, skriv man diff i din terminal.

diff terminal