androide

Comando diff in linux

Tutorial comando diff en GNU/Linux

Tutorial comando diff en GNU/Linux

Sommario:

Anonim

diff è un'utilità da riga di comando che ti consente di confrontare due file riga per riga. Può anche confrontare i contenuti delle directory.

Il comando diff è più comunemente usato per creare una patch contenente le differenze tra uno o più file che possono essere applicati usando il comando patch .

Come usare il comando diff

La sintassi per il comando diff è la seguente:

diff… FILES

Il comando diff può visualizzare l'output in diversi formati con i formati normale, contestuale e unificato che sono i più comuni. L'output include informazioni su quali righe nei file devono essere modificate in modo che diventino identiche. Se i file corrispondono, non viene prodotto alcun output.

Per salvare l'output del comando in un file, utilizzare l'operatore di reindirizzamento:

diff file1 file2 > patch

, useremo i seguenti due file per spiegare come funziona il comando diff :

file1

Ubuntu Arch Linux Debian CentOS Fedora file2

Kubuntu Ubuntu Debian Arch Linux Centos Fedora

Formato normale

Nella sua forma più semplice quando il comando diff viene eseguito su due file di testo senza alcuna opzione, produce un output nel formato normale:

diff file1 file2

L'output sarà simile al seguente:

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

Il normale formato di output è costituito da una o più sezioni che descrivono le differenze. Ogni sezione è simile alla seguente:

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

0a1 , 2d2 e 4c4, 5 sono comandi di modifica. Ogni comando di modifica contiene quanto segue, da sinistra a destra:

  • Il numero di riga o l'intervallo di righe nel primo file. Un carattere di modifica speciale. Il numero di riga o l'intervallo di righe nel secondo file.

Il carattere di modifica può essere uno dei seguenti:

  • a - Aggiungi le linee. c - Cambia le linee. d - Elimina le righe.

Il comando change è seguito dalle righe complete che vengono rimosse ( < ) e aggiunte al file ( > ).

Spieghiamo l'output:

  • 0a1 - Aggiungi la riga 1 del secondo file all'inizio del file1 (dopo la riga 0 ).
    • > Kubuntu - La riga della seconda riga che viene aggiunta al primo file come descritto sopra.
    2d2 - Elimina la riga 2 nel primo file. Il simbolo 2 dopo il simbolo d indica che se la riga non viene eliminata, verrà visualizzata sulla riga 2 nel secondo file.
    • < Arch Linux - la linea eliminata.
    4c4, 5 - Sostituisci (cambia) la riga 5 nel primo file con le righe 4-5 dal secondo file.
    • < CentOS - La riga nel primo file da sostituire. --- - Separatore. > Arch Linux e > Centos - Linee dal secondo file che sostituiscono la linea nel primo file.

Formato di contesto

Quando viene utilizzato il formato di output del contesto, il comando diff visualizza diverse righe di contesto attorno alle righe che differiscono tra i file.

L'opzione -c dice a diff di produrre output nel formato di contesto:

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

L'output inizia con i nomi e i timestamp se i file confrontati e una o più sezioni che descrivono le differenze. Ogni sezione è simile alla seguente:

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

  • from-file-line-numbers e to-file-line-numbers : i numeri di riga o l'intervallo di righe separati da virgola nel primo e nel secondo file, rispettivamente. from-file-line e to-file-line - Le linee che differiscono e le linee di contesto:
    • Le linee che iniziano con due spazi sono linee di contesto, le linee che sono le stesse in entrambi i file. Le linee che iniziano con il simbolo meno ( - ) sono le linee che non corrispondono a nulla nel secondo file. Righe mancanti nel secondo file. Le linee che iniziano con il simbolo più ( + ) sono le righe che non corrispondono a nulla nel primo file. Righe mancanti nel primo file Le righe che iniziano con il punto esclamativo ( ! ) Sono le righe che vengono modificate tra due file. Ogni gruppo di linee che iniziano con ! dal primo file ha una corrispondenza corrispondente nel secondo file.

Spieghiamo le parti più importanti dell'output:

  • In questo esempio abbiamo solo una sezione che descrive le differenze. *** 1, 6 **** e --- 1, 7 ---- ci dice la gamma delle linee dal primo e secondo file che sono inclusi in questa sezione. Ubuntu , Debian , Fedora e il l'ultima riga vuota è la stessa in entrambi i file. Queste linee iniziano con un doppio spazio - Arch Linux Linea - Arch Linux dal primo file corrisponde a niente nel secondo file. Sebbene questa riga esista anche nel secondo file, le posizioni sono diverse. Linea + Kubuntu dal secondo file corrisponde a nulla nel primo file ! CentOS Linea ! CentOS ! CentOS dal primo file e linee ! Arch Linux ! Arch Linux e ! CentOS ! CentOS dal secondo file vengono cambiati tra i file.

Per impostazione predefinita, il numero delle linee di contesto è impostato su tre. Per specificare un altro numero utilizzare l'opzione -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

Formato unificato

Il formato di output unificato è una versione migliorata del formato di contesto e produce un output più piccolo.

Usa l'opzione -u per dire a diff di stampare l'output nel formato unificato:

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

L'output inizia con i nomi e i timestamp dei file e una o più sezioni che descrivono le differenze. Ogni sezione ha la forma seguente:

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

  • @@ from-file-line-numbers to-file-line-numbers @@ - Il numero di riga o l'intervallo delle righe dal primo e dal secondo file inclusi in questa sezione. line-from-files - Le linee che differiscono e le linee di contesto:
    • Le linee che iniziano con due spazi sono linee di contesto, le linee che sono le stesse in entrambi i file. Le linee che iniziano con il simbolo meno ( - ) sono le linee che vengono rimosse dal primo file. Le linee che iniziano con il simbolo più ( + ) sono le righe aggiunte dal primo file.

Ignora il caso

Come puoi notare negli esempi precedenti, il comando diff è sensibile al maiuscolo / minuscolo per impostazione predefinita.

Usa l'opzione -i per dire a diff di ignorare il caso:

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

Conclusione

Il confronto dei file di testo per le differenze è una delle attività più comuni per gli amministratori di sistemi Linux.

Il comando diff confronta i file riga per riga. Per ulteriori informazioni, digitare man diff nel proprio terminale.

terminale diff