GNU/Linux >> Linux Esercitazione >  >> Linux

Come eseguire il confronto riga per riga dei file in Linux usando il comando diff

Se sei un utente Linux e il tuo lavoro comporta il lavoro su varie distribuzioni Linux, a volte ti ritroverai a digitare comandi su un sistema Linux senza GUI. Ciò significa che non sarai più in grado di accedere alle tue applicazioni GUI preferite, ad esempio Gedit per la modifica dei file, che di solito utilizzi per il tuo lavoro normale.

Indipendentemente dal fatto che tu sia un amministratore di sistema o uno sviluppatore, il confronto dei file è un'attività comune al lavoro di quasi tutti. Cosa succede se è necessario confrontare due file mentre si lavora su un sistema Linux solo CLI? Il tuo strumento di confronto basato su GUI preferito ovviamente non sarà a tua disposizione. Inutile dire che dovrai accontentarti di un'utilità da riga di comando per portare a termine il tuo lavoro.

In Linux, il comando diff può essere utilizzato per confrontare due file, ma il fatto è che c'è una leggera curva di apprendimento coinvolta con questa utility. Se non sai come funziona diff e stai cercando un tutorial rapido per iniziare, non cercare oltre, poiché in questo articolo discuteremo le basi di questo comando insieme ad alcuni esempi di facile comprensione.

Prima di procedere, tieni presente che tutti gli esempi in questo tutorial sono stati testati su Ubuntu 14.04 con la versione Bash 4.3.11(1) e la versione diff 3.3.

 

Comando Linux Diff

Invece di saltare direttamente agli esempi, è bene prima conoscere un po' il comando. La pagina man del comando diff rivela che lo strumento confronta i file riga per riga. La sua sintassi è:

diff [OPTION]... FILES

Mentre [OPZIONE] rappresenta le varie opzioni della riga di comando offerte dallo strumento, FILES di solito è un paio di nomi di file. Sebbene la pagina man di diff contenga informazioni utili sul comando, la documentazione completa per diff viene mantenuta come manuale Texinfo. Se le informazioni e differenza programmi sono installati correttamente nel tuo sito, il comando

info diff

dovrebbe darti accesso al manuale completo.

Utilizzo differenziato/esempi

Ora discutiamo di come viene utilizzato diff. Per questo, iniziamo con un esempio di base. Supponiamo che di seguito siano i due file che vogliamo confrontare:

file1:

test
test2
test3

file2:

test
test23
test3

Ecco come puoi usare il comando diff per confrontare questi due file:

diff file1 file2

Ed ecco l'output prodotto dal comando precedente:

2c2
< test2
---
> test23

L'output sembra criptico, giusto? Ci arriveremo tra un po'. Per prima cosa comprendiamo la struttura di base dell'output che diff produce in generale.

La prima cosa da tenere a mente è che l'output rappresenta le modifiche richieste per trasformare file1 (di solito il file originale) in file2 (il file nuovo o modificato). L'output è solitamente costituito da righe che iniziano con un numero (o un intervallo) seguito da un alfabeto (a, d o c) e un altro numero (o intervallo). Ad esempio 2c2 (dall'output sopra).

Il primo numero rappresenta la riga (o intervallo di righe) da file1 (file originale), mentre l'ultimo numero rappresenta la riga (o intervallo di righe) da file2 (il nuovo file). Per quanto riguarda l'alfabeto in mezzo, a rappresenta aggiunto , d è per eliminato, e c rappresenta cambiato .

Quindi, 2c2 significa che la seconda riga nel file originale è cambiata e deve essere sostituita con la seconda riga del nuovo file per rendere i file uguali. Se confronti manualmente i due file (file1 e file2), vedrai che è esattamente così.

Per quanto riguarda le tre righe che seguono 2c2 nell'esempio sopra, quella che inizia con '<' non è altro che la seconda riga di file1 e quella che inizia con '>' non è altro che la riga in questione dal file 2. I tre trattini tra di loro (---) servono solo a scopo di separazione.

C'è bisogno di rivedere ora l'output del primo esempio? Molto probabilmente no, poiché la spiegazione di cui sopra avrebbe dovuto essere autoesplicativa. Ora, facciamo un altro esempio.

Quindi, ecco file1:

Hi all,
This is a diff command tutorial
from HowtoForge.
Hope you'll benefit from it.
Thanks.

Ecco il file2:

Hi all,
Welcome to HowtoForge.
In this tutorial, we'll discuss the diff tool.
Hope you'll find it beneficial.
Thanks.

Ecco il comando (che rimane lo stesso):

diff file1 file2

Ed ecco l'output:

2,4c2,4
< This is a diff command tutorial
< from HowtoForge.
< Hope you'll benefit from it.
---
> Welcome to HowtoForge.
> In this tutorial, we'll discuss the diff tool.
> Hope you'll find it beneficial.

Quindi puoi vedere che in questo caso, l'output principale - 2,4c2,4 - è composto da più numeri sia prima che dopo l'alfabeto. Questi sono fondamentalmente intervalli:2,4 rappresenta il numero di riga 2,3 e 4. Quindi l'output significa che i numeri di riga da 2 a 4 nel file originale (file1) sono cambiati e devono essere sostituiti dai numeri di riga da 2 a 4 da file2 per rendere i file uguali.

Andando avanti, cambiamo un po' il contenuto dei file. Mentre il file1 rimane lo stesso, file2 ora diventa:

Welcome to HowtoForge.
In this tutorial, we'll discuss the diff tool.
Hope you'll find it beneficial.
Thanks.

This is a diff command tutorial
from HowtoForge.
Hope you'll benefit from it.
Thanks.

Ora, se esegui il comando diff, verrà prodotto il seguente output:

0a1,5
> Welcome to HowtoForge.
> In this tutorial, we'll discuss the diff tool.
> Hope you'll find it beneficial.
> Thanks.
>

Quindi puoi vedere che lo strumento ha immediatamente riconosciuto che il secondo paragrafo in file2 non è altro che ciò che contiene tutto file1. Quindi l'output dice che la riga da 1 a 5 da file2 dovrebbe essere aggiunta all'inizio di file1 per rendere i due file uguali.

E se elimini l'ultima riga ("Grazie.") da file2, ecco l'output:

0a1,5
> Welcome to HowtoForge.
> In this tutorial, we'll discuss the diff tool.
> Hope you'll find it beneficial.
> Thanks.
>
4d8
< Thanks.

Puoi vedere che l'output ora contiene anche 4d8,  il che significa che la quarta riga in file1 deve essere eliminata per sincronizzare entrambi i file a partire dalla riga numero 8. Ovviamente, questo è dopo aver affrontato la modifica 0a1,5 menzionata per prima.

Conclusione

D'accordo, l'output del comando diff non è facile da comprendere, ma la curva di apprendimento non è così ripida. Trascorri un paio d'ore con lo strumento e sicuramente ti sentirai a tuo agio con esso. Per quanto riguarda il tutorial, qui abbiamo appena graffiato la superficie. Dai un'occhiata alla pagina man del comando e ti renderai conto che c'è molto altro da imparare su diff, cosa che faremo nella prossima parte di questa serie di tutorial.


Linux
  1. Come rinominare i file in Linux

  2. Come riavviare Linux utilizzando la riga di comando

  3. Come ordinare i file in Linux usando il comando di ordinamento

  4. Come creare file sparsi in Linux usando il comando 'dd'

  5. Come visualizzare i file nascosti usando il comando `find` di Linux

Come rinominare i file usando la riga di comando in Linux

Come confrontare i file in Linux usando lo strumento Meld (Diff/Merge).

Come copiare file in Linux usando il comando CP

Come contare i file nella directory su Linux

Utilizzo del comando Diff per confrontare due file nel terminale Linux

Come scaricare file in Rocky Linux 8 sulla riga di comando usando wget