GNU/Linux >> Linux Esercitazione >  >> Linux

Come confrontare tre file in Linux usando lo strumento diff3

In uno dei nostri tutorial precedenti, abbiamo discusso di un'utilità della riga di comando di Linux, denominata diff - che consente di confrontare due file riga per riga. Ma cosa succede se il requisito è confrontare non due, ma tre file? Sì, esiste anche un'utilità della riga di comando Linux per questo, ed è appropriatamente chiamata diff3 .

Se stavi cercando uno strumento del genere, non cercare oltre, poiché in questo tutorial spiegheremo l'uso di diff3 attraverso esempi di facile comprensione.

But before we move forward, we would like you to know that all the examples mentioned in this tutorial have been tested on Ubuntu 14.04 with bash version 4.3.11(1), and the version of diff3 that we've used is 3.3.

Installa diff3

Lo strumento diff3 sarà probabilmente installato per impostazione predefinita sul tuo sistema, almeno su Ubuntu lo è. Ma se non è così, non preoccuparti perché puoi farlo facilmente installando il pacchetto GNU Diffutils. Per istruzioni su come scaricare e installare il pacchetto sul tuo sistema, vai qui.

Utilizzo di Diff3

Poiché l'utilità diff3 confronta tre file, quindi per i nostri esempi di utilizzo dovremo prendere tre file che passeremo come input allo strumento.

Ecco il file1:

This is line1 with some change
This is line2
This is line3

Ecco il file2:

This is line1
This is line2
This is line3

Ed ecco il file3:

This is line1
This is line2
This is line3

Chiaramente, se vediamo il contenuto di questi tre file, l'unica modifica è nella prima riga del primo file. Quindi ora vediamo come diff3 segnala questa modifica.

Ecco come possiamo usare diff3 in questo caso:

diff3 file1 file2 file3

Ed ecco l'output che produce:

====1
1:1c
This is line1 with some change
2:1c
3:1c
This is line1

Puoi comprendere l'output nel modo seguente:

  • La prima riga che inizia con quattro segni '=' e termina con il numero '1' dice che la modifica è nel primo file.
  • Nella riga successiva, il primo '1' significa file1; '1c' dopo i due punti 'significa che la prima riga contiene'. La riga attuale viene visualizzata nella riga successiva dell'output.
  • Allo stesso modo, 2:1c e 3:1c significano 'la prima riga di file2 e file3 contiene'. E poiché il contenuto della riga è lo stesso in entrambi i file, la riga effettiva viene visualizzata solo una volta, alla fine dell'output.

Per rendere le cose più chiare, prendiamo un altro caso in cui la modifica è in file3.

Ecco il file1:

This is line1
This is line2
This is line3

Ecco il file2:

This is line1
This is line2
This is line3

Ed ecco il file3:

This is line1 with some change
This is line2
This is line3

Il comando rimane lo stesso:

diff3 file1 file2 file3

Ed ecco l'output:

====3
1:1c
2:1c
This is line1
3:1c
This is line1 with some change

Quindi l'output in questo caso può essere compreso come:

  • La modifica è nel file3
  • Sia file1 che file2 contengono "Questa è la riga1" come prima riga
  • Mentre il file3 contiene "Questa è la riga1 con alcune modifiche" come prima riga.

Era tutto su come i rapporti diff3 cambiano nelle righe. Ora vediamo come si comporta diff3 se uno dei file contiene una riga in più:

Mentre il file1 e il file2 rimangono gli stessi, ecco il file3:

This is line1
This is line2
This is line3
This is line4

Come chiaro dal suo contenuto, file3 ora contiene una riga in più alla fine.

Eseguiamo lo stesso comando diff3:

diff3 file1 file2 file3

Ed ecco l'output prodotto dal comando:

====3
1:3a
2:3a
3:4c
This is line4

L'output inizia dicendo che la modifica è nel file3. La modifica è nella quarta riga di file3 (3:4c), che è una riga completamente nuova rispetto a file1 e file2.

Ciò di cui abbiamo discusso finora sono stati alcuni casi semplici. Prendiamo un paio di situazioni leggermente complesse. Ad esempio, considera file1, file2 e file3 come contenenti quanto segue:

This is line1
This is line2 with some change
This is line3
This is line1
This is line2
This is line3
This is line1
This is line2
This is line3 with some change

Quindi ora sia file1 che file2 contengono modifiche e anche quello in righe diverse. Vediamo cosa produce diff3 in questo caso:

====
1:2,3c
This is line2 with some change
This is line3
2:2,3c
This is line2
This is line3
3:2,3c
This is line2
This is line3 with some change

Come puoi vedere nell'output mostrato sopra, la prima riga non contiene alcun numero. Questo perché non uno, ma più file ora contengono modifiche. Per diff3, le righe 2 e 3 di tutti e tre i file ora sono diverse. Questo è il motivo per cui invece di un singolo numero dopo i due punti (:), l'output ora contiene un intervallo - '2,3', che significa dalla riga 2 alla riga 3.

Facciamo un altro esempio. Supponiamo che questa volta i tre file contengano le seguenti informazioni: 

This is line1
This is line2
This is line3
This is line4
This is line1
This is line2
This is line3
This is line1
This is line2
This is line3
This is line4
This is line5

Ora, quando viene eseguito il comando diff, produce il seguente output:

====
1:4c
This is line4
2:3a
3:4,5c
This is line4
This is line5

Qui, se provi a capire, il comando diff3 dice che le modifiche sono successive alla riga 3 in tutti e tre i file. Mentre file1 contiene la riga "This is line4" come quarta riga, file3 contiene "This is line4" e "This is line5" rispettivamente come quarta e quinta riga. Il file2, invece, ha solo 3 righe.

Quindi era tutto sul lavoro di base su diff3. Per quel che vale, ecco cosa dice la documentazione ufficiale sullo strumento:"Puoi usare il diff3 comando per mostrare le differenze tra tre file. Quando due persone hanno apportato modifiche indipendenti a un originale comune, diff3 può segnalare le differenze tra l'originale e le due versioni modificate e può produrre un file unito che contiene le modifiche di entrambe le persone insieme ad avvisi sui conflitti.".

Conclusione

Abbiamo appena scalfito la superficie qui, Diff3 è in grado di fare molto di più. Ad esempio, come sottolinea anche la documentazione ufficiale, puoi usarlo anche per unire le modifiche. Inoltre ci sono molte opzioni della riga di comando che ti consentono di personalizzare l'output del comando e di accedere ad alcune altre funzionalità che offre. È tutto lì nella pagina man, esaminalo.


Linux
  1. Come spegnere o riavviare Linux utilizzando la riga di comando

  2. Come recuperare file cancellati su Linux utilizzando lo strumento di recupero dati Scalpel?

  3. Come riavviare Linux utilizzando la riga di comando

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

  5. Come posso confrontare i file binari in Linux?

Come condividere file localmente su Linux utilizzando NitroShare

Come rinominare i file usando la riga di comando in Linux

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

Come confrontare due file nel terminale Linux

Come copiare file in Linux usando il comando CP

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