Come confrontare due file di testo nel terminale Linux

Contenuti

Illustrazione di una finestra di terminale in Linux

Hai bisogno di vedere le differenze tra due revisioni di un file di testo?? Successivamente diff è il comando che ti serve. Questo tutorial ti mostra come usare diff su Linux e macOS, il modo più semplice.

Buceando in diff

il diff Il comando confronta due file e produce un elenco delle differenze tra i due. Per essere più precisi, emette un elenco delle modifiche che devono essere apportate al primo file in modo che corrisponda al secondo file. Se tieni conto di questo, sarà più facile per te capire il risultato di diff. il diff Il comando è stato progettato per trovare le differenze tra i file del codice sorgente e produrre un output che potrebbe essere letto e utilizzato da altri programmi., Come la toppa comando. In questo tutorial, esamineremo i modi di utilizzo più utili e a misura d'uomo diff.

Entriamo e analizziamo due file. L'ordine dei file sulla riga di comando determina quale file diff considera que es elprimer archivoy que considera que es elsegundo archivo”. Nel seguente esempio, alpha1 è il primo file e alpha2 è il secondo file. Entrambi i file contengono il alfabeto fonetico ma il secondo file, alfa2, ha avuto alcune modifiche aggiuntive in modo che i due file non siano identici.

Possiamo confrontare i file con questo comando. scrive diff, Uno spazio, il nome del primo file, Uno spazio, il nome del secondo file e quindi premere Invio.

diff alfa1 alfa2

Output del comando diff senza opzioni

Come sezionare questo risultato?? Una volta che sai cosa cercare, non sarà così male. Ogni differenza è a sua volta elencata in una singola colonna e ogni differenza è etichettata. L'etichetta contiene numeri su entrambi i lati di una lettera, Che cosa 4c4. Il primo numero è il numero di riga in alpha1 e il secondo numero è il numero di riga in alpha2. La lettera di mezzo può essere:

  • C: La riga del primo file dovrebbe essere modificata in modo che corrisponda alla riga del secondo file.
  • D: La riga del primo file deve essere rimossa per corrispondere al secondo file.
  • un: È necessario aggiungere contenuti aggiuntivi al primo file in modo che corrispondano al secondo file.

il 4c4 nel nostro esempio, dicci che la riga quattro di alpha1 deve essere modificata in modo che corrisponda alla riga quattro di alpha2. Questa è la prima differenza tra i due file che diff incontri.

Righe che iniziano con < controlla il primo file, nel nostro esempio alpha1, e le righe che iniziano con > controlla il secondo file, alfa2. La linea < Delta ci dice che la parola Delta è il contenuto della riga quattro in alpha1. La linea > Dave ci dice che la parola Dave è il contenuto della riga quattro in alpha2. Quindi, per riassumere, dobbiamo sostituire Delta con Dave sulla riga quattro in alpha1, affinché quella riga corrisponda in entrambi i file.

La prossima modifica è indicata dal 12c12. Applicando la stessa logica, questo ci dice che la linea 12 in alpha1 contiene la parola Lima, ma la linea 12 da alpha2 contiene la parola Linux.

La terza modifica si riferisce a una riga che è stata rimossa da alpha2. L'etichetta 21d20 se descifra como “la linea 21 deve essere rimosso dal primo file affinché entrambi i file vengano sincronizzati dalla linea 20 in poi”. il < Uniform line ci mostra il contenuto della riga da rimuovere da alpha1.

La quarta differenza è etichettata 26a26,28. Questa modifica si riferisce a tre righe aggiuntive che sono state incorporate in alpha2. Notare la 26,28 sull'etichetta. I numeri di due righe separati da una virgola rappresentano un intervallo di numeri di riga. In questo esempio, la gamma va dalla linea 26 a 28. La etiqueta se interpreta comoen la línea 26 dal primo file, aggiungi le righe 26 un 28 del segundo archivo”. Ci vengono mostrate le tre righe in alpha2 che devono essere aggiunte ad alpha1. Questi contengono le parole Quirk, Strano e Fascino.

Rapide a linea singola

Se tutto quello che vuoi sapere è se due file sono uguali, Utilizzare il -s (segnala file identici) opzione.

diff -s alfa1 alfa3

Output del comando diff con l'opzione -s

Puoi usare il -q (breve) opzione per ottenere una dichiarazione altrettanto concisa su due file diversi.

diff -q alfa1 alfa2

Output del comando diff con l'opzione -q

Una cosa a cui prestare attenzione è che con due file identici il-q L'opzione (breve) si chiude completamente e non riporta nulla.

Una visione alternativa

il -y (Fianco a fianco) usa un layout diverso per descrivere le differenze di file. Spesso è conveniente usare il -W (larghezza) con la vista fianco a fianco, per limitare il numero di colonne visualizzate. In questo modo si evitano antiestetiche righe avvolgenti che rendono difficile la lettura dell'output. Ecco l'abbiamo detto diff per produrre una visualizzazione affiancata e limitare l'output a 70 colonne.

diff -y -W 70 alfa1 alfa2

Uscita comando Diff con visualizzazione affiancata

Il primo file sulla riga di comando, alfa1, viene visualizzato a sinistra e la seconda riga della riga di comando, alfa2, mostrato a destra. Vengono visualizzate le righe di ciascun file, uno accanto all'altro. Ci sono caratteri indicatori accanto a quelle righe in alpha2 che sono state modificate, rimosso o aggiunto.

  • |: Una riga che è stata modificata nel secondo file.
  • <: Una riga che è stata rimossa dal secondo file.
  • >: Una riga che è stata aggiunta al secondo file che non è nel primo file.

Se preferisci un riepilogo parallelo più compatto delle differenze di file, Utilizzare il --suppress-common-lines opzione. Questo forze diff per elencare solo le righe modificate, aggiunto o rimosso.

diff -y -W 70 --sopprimere le linee comuni alfa1 alfa2

Output del comando diff con l'opzione --suppress-common-lines

Aggiungi un tocco di colore

Un'altra utility chiamata colordiff aggiunge l'evidenziazione del colore al diff produzione. Questo rende molto più facile vedere quali linee hanno differenze.

Utilizzo apt-get per installare questo pacchetto sul tuo sistema se stai usando Ubuntu o un'altra distribuzione basata su Debian. Su altre distribuzioni Linux, usa lo strumento di gestione dei pacchetti della tua distribuzione Linux.

sudo apt-get install colordiff

Utilizzo colordiff proprio come lo useresti tu diff.

Output del comando Colordiff senza opzioni

In realtà, colordiff è un involucro per diff, e diff fa tutto il lavoro dietro le quinte. È per questo, tutti i diff le alternative funzioneranno con colordiff.

Output del comando colordiff con l'opzione --suppress-common-lines

Fornisci un po' di contesto

Per trovare una definizione intermedia tra avere tutte le righe nei file visualizzate sullo schermo e avere solo le righe modificate nell'elenco, possiamo chiedere diff per fornire un po' di contesto. Ci sono due modi per farlo. Entrambi i modi raggiungono lo stesso scopo, che è mostrare alcune righe prima e dopo ogni riga modificata. Sarai in grado di vedere cosa sta succedendo nel file in cui è stata rilevata la differenza.

Il primo metodo utilizza il -c (contesto copiato) opzione.

colordiff -c alfa1 alfa2

Output Colordiff con l'opzione -c

il diff l'output ha un'intestazione. L'intestazione elenca i due nomi di file e i loro tempi di modifica. Ci sono asterischi (*) prima del nome del primo file e trattini (-) prima del nome del secondo file. Verranno utilizzati asterischi e trattini per indicare a quale file appartengono le righe di output.

Una linea di asterischi con 1,7 nel mezzo indica che stiamo vedendo linee di alfa1. per essere precisi, stiamo guardando le righe da uno a sette. La parola Delta è contrassegnata come modificata. Ha un punto esclamativo ( ! ) insieme a lui, ed è rosso. Tre righe di testo invariato vengono mostrate prima e dopo quella riga in modo che possiamo vedere il contesto di quella riga nel file.

La linea tratteggiata con 1,7 nel mezzo ci dice che ora stiamo vedendo le linee alfa2. Ancora, stiamo guardando le righe da uno a sette, con la parola Dave sulla riga quattro contrassegnata come differente.

Tre righe di contesto sopra e sotto ogni modifica sono l'impostazione predefinita. Puoi specificare quante righe di contesto vuoi diff Fornire. Per fare questo, usa el -C (contesto copiato) con un “C” mayúscula y proporcione el número de líneas que desea:

colordiff -C 2 alfa1 alfa2

Output Colordiff con l'opzione -C 2

Il secondo diff L'opzione che fornisce il contesto è il -u opzione (contesto unificato).

colordiff -u alpha1 alpha2

Output Colordiff con l'opzione -u

Come prima, abbiamo un'intestazione nell'output. I due file vengono nominati e vengono visualizzati i loro tempi di modifica. Ci sono script (-) prima del nome alfa1 e dei segni più (+) prima del nome alpha2. Questo ci dice che i trattini saranno usati per riferirsi ad alpha1 e i segni più saranno usati per riferirsi ad alpha2. Sparse in tutto l'elenco ci sono linee che iniziano con segni (@). Queste linee segnano l'inizio di ogni differenza. Ci dicono anche quali linee vengono mostrate da ciascun file.

Le tre linee sono mostrate prima e dopo la linea contrassegnata come diversa in modo che possiamo vedere il contesto della linea modificata. Nella vista unificata, le righe con la differenza vengono visualizzate una sopra l'altra. La linea alpha1 è preceduta da un trattino e la linea alpha2 è preceduta da un segno più. Questa schermata realizza in otto righe ciò che la schermata di contesto copiata sopra ha impiegato quindici per fare.

Come potremmo aspettare?, possiamo chiedere diff per fornire esattamente il numero di righe di contesto unificato che vorremmo vedere. Per fare questo, usa el -U (contesto unificato) con un “tu” mayúscula y proporcione la cantidad de líneas que desea:

colordiff -U 2 alfa1 alfa2

Output Colordiff con l'opzione -U 2

Ignora spazi bianchi e maiuscole

Analizziamo altri due file, test4 e test5. Questi hanno i sei nomi di supereroi su di loro.

colordiff -y -W 70 prova4 prova5

Output Colordiff nei file test4 e test5

I risultati mostrano che diff non trova nulla di diverso con le linee Black Widow, Spider-Man e Thor. Mark cambia con le linee di Captain America, Ironman e Hulk.

Quindi, Ciò che è diverso? Bene, un test5, Hulk se escribe con una “h” minúscula y el Capitán América tiene un espacio adicional entreCapitán” e “America”. Va bene, è facile da vedere, ma che dire della linea ironman?? Non ci sono differenze visibili. Ecco una buona regola pratica. Se non riesci a vederlo, la soluzione è uno spazio vuoto. C'è quasi certamente uno spazio sprecato o due, o un carattere di tabulazione, alla fine di quella riga.

Se non ti interessa, puoi istruire diff ignorare tipi specifici di differenza di linea, Compreso:

  • -io: Ignora le differenze tra maiuscole e minuscole.
  • -INSIEME A: Ignora gli spazi vuoti finali.
  • -B: Ignora i cambiamenti nella quantità di spazio bianco.
  • -w: Ignora tutte le modifiche agli spazi bianchi.

Chiediamo a diff di controllare di nuovo quei due file, ma questa volta per ignorare qualsiasi differenza nel caso.

colordiff -i -y -W 70 prova4 prova5

output colordiff ignora maiuscole/minuscole

Las líneas conThe Hulk” e “The Hulkahora se consideran una coincidencia, y no se marca ninguna diferencia para la “h” minuscolo. Chiediamo diff ignorare anche gli spazi bianchi finali.

colordiff -i -Z -y -W 70 prova4 prova5

L'output di Colordiff ignora gli spazi bianchi finali

Come sospettato, il vuoto finale deve essere stato la differenza nella linea Ironman perché diff non fa più differenza per quella linea. Questo lascia Capitan America. Chiediamo diff ignora il caso e ignora tutti problemi di spazi bianchi.

colordiff -i -w -y -W 70 prova4 prova5

L'output di colordiff ignora tutti gli spazi bianchi

conteggio diff ignorare le differenze che non ci riguardano, diff ci dice che, per i nostri scopi, i file corrispondono.

il diff Il comando ha molte più opzioni, ma la maggior parte di essi riguarda la produzione di risultati leggibili dalla macchina. Questi possono essere rivisti su Linux pagina man. Le alternative che abbiamo usato negli esempi sopra ti permetteranno di rintracciare tutte le differenze tra le versioni dei tuoi file di testo, usando la riga di comando e gli occhi umani.

impostaTimeout(funzione(){
!funzione(F,B,e,v,n,T,S)
{Se(f.fbq)Restituzione;n=f.fbq=funzione(){n.callMethod?
n.callMethod.apply(n,argomenti):n.queue.push(argomenti)};
Se(!f._fbq)f._fbq = n;n.push=n;n.loaded=!0;n.version='2.0′;
n.coda=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(T,S) } (window, documento,'copione',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('dentro', '335401813750447');
fbq('traccia', 'Visualizzazione della pagina');
},3000);

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.