Android

Comandă dif în linux

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

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

Cuprins:

Anonim

diff este un utilitar pentru linia de comandă care vă permite să comparați două fișiere linie cu linie. De asemenea, poate compara conținutul directoarelor.

Comanda diff este cel mai frecvent utilizată pentru a crea un patch care conține diferențele dintre unul sau mai multe fișiere care pot fi aplicate folosind comanda patch .

Cum se utilizează comanda diff

Sintaxa pentru comanda diff este următoarea:

diff… FILES

Comanda diff poate afișa ieșirea în mai multe formate cu formatul normal, context și unificat fiind cele mai comune. Rezultatul include informații despre ce linii din fișiere trebuie schimbate, astfel încât acestea să devină identice. Dacă fișierele se potrivesc, nu se produce nicio ieșire.

Pentru a salva ieșirea comenzii într-un fișier, utilizați operatorul de redirecționare:

diff file1 file2 > patch

, vom folosi următoarele două fișiere pentru a explica cum funcționează comanda diff :

fișier1

Ubuntu Arch Linux Debian CentOS Fedora fișier2

Kubuntu Ubuntu Debian Arch Linux Centos Fedora

Format normal

În forma sa cea mai simplă când comanda diff este rulată pe două fișiere text fără nicio opțiune, produce o ieșire în format normal:

diff file1 file2

Rezultatul va arăta astfel:

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

Formatul normal de ieșire este format dintr-una sau mai multe secțiuni care descriu diferențele. Fiecare secțiune arată astfel:

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

0a1 , 2d2 și 4c4, 5 sunt comenzi de schimbare. Fiecare comandă de modificare conține următoarele, de la stânga la dreapta:

  • Numărul de linie sau intervalul de linii din primul fișier.Un caracter de schimbare specială.Numărul de linie sau intervalul de linii din al doilea fișier.

Caracterul schimbării poate fi unul dintre următoarele:

  • a - Adăugați liniile. c - Schimbă liniile. d - Ștergeți liniile.

Comanda schimbare este urmată de liniile complete care sunt eliminate ( < ) și adăugate la fișier ( > ).

Să explicăm rezultatul:

  • 0a1 - Adăugați linia 1 a celui de-al doilea fișier la începutul fișierului1 (după linia 0 ).
    • > Kubuntu - Linia din a doua linie care este adăugată la primul fișier descris mai sus.
    2d2 - Ștergeți linia 2 din primul fișier. Simbolul 2 după d înseamnă că dacă linia nu este ștersă, aceasta va apărea pe linia 2 în al doilea fișier.
    • < Arch Linux - linia ștersă.
    4c4, 5 - Înlocuiți (modificați) linia 5 din primul fișier cu liniile 4-5 din al doilea fișier.
    • < CentOS - Linia din primul fișier care trebuie înlocuit. --- - Separator. > Arch Linux și > Centos - Linii din al doilea fișier care înlocuiește linia din primul fișier.

Formatul de context

Când se folosește formatul de ieșire a contextului, comanda diff afișează mai multe linii de context în jurul liniilor care diferă între fișiere.

Opțiunea -c indică diff pentru a produce ieșire în format context:

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

Ieșirea începe cu numele și punctele de timp dacă sunt comparate fișierele și una sau mai multe secțiuni care descriu diferențele. Fiecare secțiune arată astfel:

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

  • from-file-line-numbers și to-file-line-numbers - Numerele de linie sau intervalul de linii separate de virgule în primul și, respectiv, al doilea fișier. from-file-line și to-file-line - Liniile care diferă și liniile de context:
    • Liniile care încep cu două spații sunt linii de context, liniile care sunt aceleași în ambele fișiere.Liniile care încep cu simbolul minus ( - ) sunt liniile care nu corespund nimic din al doilea fișier. Liniile care lipsesc din al doilea fișier.Liniile care încep cu simbolul plus ( + ) sunt liniile care nu corespund nimic în primul fișier. Liniile care lipsesc din primul fișier.Liniile care încep cu semnul exclamării ( ! ) Sunt liniile care se schimbă între două fișiere. Fiecare grup de linii încep cu ! din primul fișier are o potrivire corespunzătoare în al doilea fișier.

Să explicăm cele mai importante părți ale rezultatului:

  • În acest exemplu avem o singură secțiune care descrie diferențele. *** 1, 6 **** și --- 1, 7 ---- ne arată gama de linii din primul și al doilea fișier care sunt incluse în această secțiune. Linii Ubuntu , Debian , Fedora și ultima linie goală este aceeași în ambele fișiere. Aceste linii încep cu double space.Line - Arch Linux din primul fișier nu corespunde nimic din al doilea fișier. Deși această linie există și în al doilea fișier, pozițiile sunt diferite. Linia + Kubuntu din cel de-al doilea fișier nu corespunde cu nimic din primul fișier ! CentOS Linie ! CentOS ! CentOS din primul fișier și linii ! Arch Linux ! Arch Linux și ! CentOS ! CentOS din al doilea fișier sunt schimbate între fișiere.

În mod implicit, numărul liniilor contextuale implicite este la trei. Pentru a specifica un alt număr, folosiți opțiunea -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

Format unificat

Formatul de ieșire unificat este o versiune îmbunătățită a formatului contextual și produce o ieșire mai mică.

Folosiți opțiunea -u pentru a spune diff pentru a tipări ieșirea în formatul unificat:

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

Ieșirea începe cu numele și punctele de timp ale fișierelor și una sau mai multe secțiuni care descriu diferențele. Fiecare secțiune ia următoarea formă:

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

  • @@ from-file-line-numbers to-file-line-numbers @@ - Numărul de linii sau intervalul de linii din primul și al doilea fișier incluse în această secțiune. line-from-files - Liniile care diferă și liniile de context:
    • Liniile care încep cu două spații sunt linii de context, liniile care sunt aceleași în ambele fișiere.Liniile care încep cu simbolul minus ( - ) sunt liniile care sunt eliminate din primul fișier.Liniile care încep cu simbolul plus ( + ) sunt liniile care sunt adăugate din primul fișier.

Ignorați cazul

După cum observați în exemplele de mai sus, comanda diff este sensibilă la litere mari și minuscule.

Folosiți opțiunea -i pentru a indica diff pentru a ignora cazul:

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

Concluzie

Compararea fișierelor text pentru diferențe este una dintre cele mai frecvente sarcini pentru administratorii de sisteme Linux.

Comanda diff compară fișierele linie cu linie. Pentru mai multe informații, tastați man diff în terminalul dvs.

terminal difer