Android

Diff kommando i Linux

Diff • GitHub & Git Foundations

Diff • GitHub & Git Foundations

Indholdsfortegnelse:

Anonim

diff er et kommandolinjeværktøj, der giver dig mulighed for at sammenligne to filer linje for linje. Det kan også sammenligne indholdet i mapper.

diff kommandoen bruges oftest til at oprette en patch, der indeholder forskellene mellem en eller flere filer, der kan anvendes ved hjælp af patch kommandoen.

Sådan bruges diff kommandoen

Syntaks for kommandoen diff er som følger:

diff… FILES

diff kommandoen kan vise output i flere formater, hvor det normale, kontekst og ensformat er det mest almindelige. Outputet indeholder information om hvilke linjer i filerne, der skal ændres, så de bliver identiske. Hvis filerne stemmer overens, produceres der ingen output.

For at gemme kommandoutputet i en fil skal du bruge omdirigeringsoperatøren:

diff file1 file2 > patch

, bruger vi følgende to filer til at forklare, hvordan diff kommandoen fungerer:

fil1

Ubuntu Arch Linux Debian CentOS Fedora fil2

Kubuntu Ubuntu Debian Arch Linux Centos Fedora

Normalt format

I sin enkleste form, når diff kommandoen køres på to tekstfiler uden nogen mulighed, producerer den en output i det normale format:

diff file1 file2

Outputet ser sådan ud:

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

Det normale outputformat består af en eller flere sektioner, der beskriver forskellene. Hver sektion ser sådan ud:

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

0a1 , 2d2 og 4c4, 5 er ændringskommandoer. Hver ændringskommando indeholder følgende fra venstre mod højre:

  • Linjenummer eller række af linjer i den første fil. Et specielt ændringstegn. Linjenummeret eller linjeavstanden i den anden fil.

Ændringstegnet kan være et af følgende:

  • a - Tilføj linjerne. c - Skift linjer. d - Slet linjerne.

Ændringskommandoen følges af de komplette linjer, der fjernes ( < ) og tilføjes til filen ( > ).

Lad os forklare output:

  • 0a1 - Tilføj linje 1 i den anden fil i begyndelsen af ​​filen1 (efter linjen 0 ).
    • > Kubuntu - Linjen fra den anden linje, der føjes til den første fil som beskrevet ovenfor.
    2d2 - Slet linje 2 i den første fil. 2 efter symbolet d betyder, at hvis linjen ikke slettes, vil den vises på linje 2 i den anden fil.
    • < Arch Linux - den slettede linje.
    4c4, 5 - Erstat (ændre) linje 5 i den første fil med linjer 4-5 fra den anden fil.
    • < CentOS - Linjen i den første fil, der skal udskiftes. --- - Separator. > Arch Linux og > Centos - Linjer fra den anden fil, der erstatter linjen i den første fil.

Kontekstformat

Når kontekstoutputformatet bruges, viser diff kommandoen flere kontekstlinjer omkring linjerne, der er forskellige mellem filerne.

Indstillingen -c fortæller diff at producere output i kontekstformatet:

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

Outputet starter med navnene og tidsstemplerne, hvis de filer, der sammenlignes, og en eller flere sektioner, der beskriver forskellene. Hver sektion ser sådan ud:

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

  • from-file-line-numbers og to-file-line-numbers - Linjenumrene eller kommasepareret række linjer i henholdsvis den første og den anden fil. from-file-line og to-file-line - De forskellige linjer og kontekstlinier:
    • Linjer, der starter med to mellemrum, er kontekstlinier, linjerne, der er de samme i begge filer. Linjer, der starter med minussymbolet ( - ), er de linjer, der ikke svarer til noget i den anden fil. Linjer, der mangler i den anden fil. Linjer, der starter med plussymbolet ( + ), er de linjer, der ikke svarer til noget i den første fil. Linjer, der mangler i den første fil. Linjer, der begynder med udråbstegn ( ! ), Er de linjer, der ændres mellem to filer. Hver gruppe af linjer starter med ! fra den første fil har en tilsvarende match i den anden fil.

Lad os forklare de vigtigste dele af output:

  • I dette eksempel har vi kun et afsnit, der beskriver forskellene. *** 1, 6 **** og --- 1, 7 ---- fortæller os række af linjer fra den første og anden fil, der er inkluderet i dette afsnit. Linjer Ubuntu , Debian , Fedora og sidste tomme linje er de samme i begge filer. Disse linjer starter med dobbelt mellemrum.Line - Arch Linux fra den første fil svarer ikke til noget i den anden fil. Selvom denne linje også findes i den anden fil, er positionerne forskellige.Line + Kubuntu fra den anden fil svarer ikke til noget i den første fil.Line ! CentOS ! CentOS fra den første fil og linjer ! Arch Linux ! Arch Linux og ! CentOS ! CentOS fra den anden fil ændres mellem filerne.

Som standard er antallet af kontekstlinjer standard til tre. For at specificere et andet nummer skal du bruge indstillingen -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 samlede outputformat er en forbedret version af kontekstformatet og producerer en mindre output.

Brug indstillingen -u til at fortælle diff at udskrive output i det samlede format:

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

Outputet begynder med navnene og tidsstemplerne på filerne og en eller flere sektioner, der beskriver forskellene. Hvert afsnit har følgende form:

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

  • @@ from-file-line-numbers to-file-line-numbers @@ - @@ from-file-line-numbers to-file-line-numbers @@ eller rækkevidden af ​​linjerne fra den første og anden fil inkluderet i dette afsnit. line-from-files - Linjerne, der er forskellige og kontekstlinier:
    • Linjer, der starter med to mellemrum, er kontekstlinier, linjerne, der er de samme i begge filer. Linjer, der starter med minussymbolet ( - ), er linjerne, der fjernes fra den første fil. Linjer, der starter med plussymbolet ( + ), er linjerne, der er tilføjet fra den første fil.

Ignorer sagen

Som du måske bemærker i ovenstående eksempler, er diff kommandoen som standard store og små bogstaver.

Brug indstillingen -i til at fortælle diff til ignoreret sag:

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

Konklusion

Sammenligning af tekstfiler for forskelle er en af ​​de mest almindelige opgaver for Linux-systemadministratorer.

diff kommandoen sammenligner filer linje for linje. For mere information, skriv man diff i din terminal.

diff terminal