Como comparar dois arquivos de texto no terminal Linux

Conteúdo

Ilustração de uma janela de terminal no Linux

Você precisa ver as diferenças entre duas revisões de um arquivo de texto? Subseqüentemente diff é o comando que você precisa. Este tutorial mostra como usar diff no Linux e macOS, a maneira mais simples.

Buceando em diferença

a diff O comando compara dois arquivos e produz uma lista das diferenças entre os dois. Para ser mais preciso, mostra uma lista das mudanças que precisam ser feitas no primeiro arquivo para coincidir com o segundo arquivo. Se você levar isso em consideração, será mais fácil para você entender o resultado de diff. a diff O comando foi projetado para encontrar diferenças entre os arquivos de código-fonte e produzir uma saída que pudesse ser lida e trabalhada por outros programas., como ele correção comando. Neste tutorial, veremos as maneiras mais úteis e amigáveis ​​de usar diff.

Vamos mergulhar e analisar dois arquivos. A ordem dos arquivos na linha de comando determina qual arquivo diff considera que é o “primeiro arquivo” e que considera que é o “segundo arquivo”. No exemplo a seguir, alpha1 é o primeiro arquivo e alpha2 é o segundo arquivo. Ambos os arquivos contêm o alfabeto fonético mas o segundo arquivo, alpha2, teve algumas modificações adicionais para que os dois arquivos não fossem idênticos.

Podemos comparar os arquivos com este comando. Escreve diff, um espaço, o nome do primeiro arquivo, um espaço, o nome do segundo arquivo e pressione Enter.

diff alpha1 alpha2

Saída do comando diff sem opções

Como dissecamos esse resultado? Depois de saber o que procurar, não vai ser tão ruim. Cada diferença é, por sua vez, listada em uma única coluna e cada diferença é rotulada. A etiqueta contém números em ambos os lados de uma carta, O que 4c4. O primeiro número é o número da linha em alfa1 e o segundo número é o número da linha em alfa2. A letra do meio pode ser:

  • C: A linha do primeiro arquivo deve ser alterada para coincidir com a linha do segundo arquivo.
  • D: A linha do primeiro arquivo precisa ser removida para corresponder ao segundo arquivo.
  • uma: Conteúdo adicional deve ser adicionado ao primeiro arquivo para corresponder ao segundo arquivo.

a 4c4 em nosso exemplo, diga-nos que a linha quatro de alpha1 precisa ser alterada para corresponder à linha quatro de alpha2. Esta é a primeira diferença entre os dois arquivos que diff Encontros.

Linhas começando com < verifique o primeiro arquivo, em nosso exemplo alpha1, e as linhas que começam com > verifique o segundo arquivo, alpha2. A linha < Delta nos diz que a palavra Delta é o conteúdo da linha quatro em alfa1. A linha > Dave nos diz que a palavra Dave é o conteúdo da linha quatro em alfa2. Então, para resumir, precisamos substituir Delta por Dave na linha quatro em alfa1, para essa linha corresponder em ambos os arquivos.

A próxima mudança é indicada pelo 12c12. Aplicando a mesma lógica, isso nos diz que a linha 12 em alpha1 contém a palavra Lima, mas a linha 12 de alpha2 contém a palavra Linux.

A terceira mudança refere-se a uma linha que foi removida de alpha2. O rótulo 21d20 é decifrado como “a linha 21 precisa ser removido do primeiro arquivo para que ambos os arquivos sejam sincronizados da linha 20 em diante”. a < Uniform linha mostra-nos o conteúdo da linha a ser removida de alpha1.

A quarta diferença é rotulada 26a26,28. Esta mudança se refere a três linhas adicionais que foram incorporadas ao alpha2. Note o 26,28 no rótulo. Os números de duas linhas separados por uma vírgula representam um intervalo de números de linha. Neste exemplo, o intervalo vai desde a linha 26 a 28. O rótulo é interpretado como “na linha 26 do primeiro arquivo, adicione as linhas 26 uma 28 do segundo arquivo”. São mostradas as três linhas em alpha2 que devem ser adicionadas a alpha1. Estes contêm as palavras Quirk, Estranho e Charme.

Corredeiras de linha única

Se você só quer saber se dois arquivos são iguais, Use o -s (relatar arquivos idênticos) opção.

diff -s alpha1 alpha3

Saída do comando diff com a opção -s

Você pode usar o -q (baixo) opção de obter uma declaração igualmente concisa sobre dois arquivos que são diferentes.

diff -q alpha1 alpha2

Saída do comando diff com opção -q

Uma coisa a se prestar atenção é que, com dois arquivos idênticos, o-q Opção (baixo) fecha completamente e não reporta nada.

Uma visão alternativa

a -y (lado a lado) usa um layout diferente para descrever as diferenças do arquivo. Muitas vezes, é conveniente usar o -W (largura) com a vista lado a lado, para limitar o número de colunas exibidas. Isso evita linhas que tornam a saída difícil de ler. Aqui nós dissemos isso diff para produzir uma exibição lado a lado e limitar a saída para 70 colunas.

diff -y -W 70 alpha1 alpha2

Saída de comando Diff com exibição lado a lado

O primeiro arquivo na linha de comando, alpha1, é mostrado à esquerda e a segunda linha da linha de comando, alpha2, mostrado à direita. As linhas de cada arquivo são exibidas, um ao lado do outro. Existem caracteres indicadores ao lado dessas linhas em alpha2 que foram alterados, removido ou adicionado.

  • |: Uma linha que foi alterada no segundo arquivo.
  • <: Uma linha que foi removida do segundo arquivo.
  • >: Uma linha que foi adicionada ao segundo arquivo que não está no primeiro arquivo.

Se você preferir um resumo paralelo mais compacto das diferenças de arquivo, Use o --suppress-common-lines opção. Isso força diff listar apenas as linhas modificadas, adicionado ou removido.

diff -y -W 70 --suprimir linhas-comuns alpha1 alpha2

Saída do comando diff com a opção --suppress-common-lines

Adicione um toque de cor

Outro utilitário chamado colordiff adiciona realce de cor ao diff Produção. Isso torna muito mais fácil ver quais linhas têm diferenças.

Usar apt-get para instalar este pacote em seu sistema se você estiver usando Ubuntu ou outra distribuição baseada em Debian. Em outras distribuições Linux, use a ferramenta de gerenciamento de pacotes de sua distribuição Linux.

sudo apt-get install colordiff

Usar colordiff assim como você o usaria diff.

Saída do comando Colordiff sem opções

Na realidade, colordiff é um invólucro para diff, e diff faz todo o trabalho nos bastidores. É por isso que, todos os diff alternativas funcionarão com colordiff.

Saída do comando colordiff com a opção --suppress-common-lines

Forneça algum contexto

Para encontrar uma definição intermediária entre ter todas as linhas nos arquivos exibidos na tela e ter apenas as linhas alteradas na lista, Nós podemos pergutar diff para fornecer algum contexto. Existem duas maneiras de fazer isso. Ambas as formas cumprem o mesmo propósito, que é mostrar algumas linhas antes e depois de cada linha modificada. Você será capaz de ver o que está acontecendo no arquivo onde a diferença foi detectada.

O primeiro método usa o -c (contexto copiado) opção.

colordiff -c alpha1 alpha2

Saída Colordiff com opção -c

a diff a saída tem um cabeçalho. O cabeçalho lista os dois nomes de arquivo e seus horários de modificação. Existem asteriscos (*) antes do nome do primeiro arquivo e hifens (-) antes do nome do segundo arquivo. Asteriscos e hifens serão usados ​​para indicar a qual arquivo as linhas de saída pertencem.

Uma linha de asteriscos com 1,7 no meio indica que estamos vendo linhas de alfa1. Para ser precisos, estamos olhando para as linhas um a sete. A palavra Delta está marcada como modificada. Tem um ponto de exclamação ( ! ) ao lado do, e é vermelho. Três linhas de texto inalterado são mostradas antes e depois dessa linha para que possamos ver o contexto dessa linha no arquivo.

A linha tracejada com 1,7 no meio, ele nos diz que agora estamos vendo linhas alfa2. Novamente, estamos olhando para as linhas um a sete, com a palavra Dave na linha quatro marcada como diferente.

Três linhas de contexto acima e abaixo de cada mudança é o padrão. Você pode especificar quantas linhas de contexto deseja diff Fornecer. Para fazer isso, usar el -C (contexto copiado) com uma “C” maiús nous e fornecer o número de linhas que você quer:

colordiff -C 2 alpha1 alpha2

Saída Colordiff com opção -C 2

O segundo diff A opção que fornece contexto é o -u opção (contexto unificado).

colordiff -u alpha1 alpha2

Saída Colordiff com opção -u

Como antes, temos um cabeçalho na saída. Os dois arquivos são nomeados e seus horários de modificação são exibidos. Existem scripts (-) antes do nome alpha1 e sinais de mais (+) antes do nome alpha2. Isso nos diz que os hífens serão usados ​​para se referir a alfa1 e os sinais de mais serão usados ​​para se referir a alfa2. Espalhadas pela lista estão as linhas que começam com sinais (@). Essas linhas marcam o início de cada diferença. Eles também nos dizem quais linhas são mostradas de cada arquivo.

As três linhas são mostradas antes e depois da linha marcada como diferente para que possamos ver o contexto da linha modificada. Na visão unificada, as linhas com a diferença são exibidas uma em cima da outra. A linha alfa1 é precedida por um traço e a linha alfa2 é precedida por um sinal de mais. Esta tela realiza em oito linhas o que a tela de contexto copiada acima demorou quinze para fazer.

Como poderíamos esperar, Nós podemos pergutar diff para fornecer exatamente o número de linhas de contexto unificado que gostaríamos de ver. Para fazer isso, usar el -U (contexto unificado) com uma “você” maiús nous e fornecer o número de linhas que você quer:

colordiff -U 2 alpha1 alpha2

Saída Colordiff com opção -U 2

Ignorar espaços em branco e maiúsculas

Vamos analisar dois outros arquivos, test4 e test5. Estes têm os seis nomes de super-heróis neles.

colordiff -y -W 70 test4 test5

Saída de Colordiff em arquivos test4 e test5

Os resultados mostram que diff não encontra nada diferente com as linhas da Black Widow, Homem-Aranha e Thor. Marque as mudanças com as linhas do Capitão América, Ironman y Hulk.

Então, O que está diferente? Nós vamos, um teste 5, Hulk é escrito com um “h” minúscula e capitão América tem um espaço adicional entre “Capitão” e “América”. Está bem, isso é fácil de ver, mas e a linha ironman? Não há diferenças visíveis. Aqui está uma boa regra prática. Se você não pode ver isso, a solução é um espaço em branco. É quase certo que haja um espaço desperdiçado ou dois, ou um caractere de tabulação, no final dessa linha.

Se você não se importa, você pode instruir diff ignorar tipos específicos de diferença de linha, Incluindo:

  • -eu: Ignore as diferenças entre maiúsculas e minúsculas.
  • -COM: Ignorar espaços em branco à direita.
  • -B: Ignora as alterações na quantidade de espaço em branco.
  • -C: Ignorar todas as alterações de espaço em branco.

Vamos pedir ao diff para verificar esses dois arquivos novamente, mas desta vez para ignorar qualquer diferença no caso.

colordiff -i -y -W 70 test4 test5

saída do colordiff ignorar maiúsculas e minúsculas

Linhas com “O Hulk” e “O Hulk” são agora considerados uma coincidência, e isso não faz diferença para o “h” minúsculas. Vamos perguntar diff para também ignorar o espaço em branco à direita.

colordiff -i -Z -y -W 70 test4 test5

A saída de Colordiff ignora espaços em branco à direita

Como suspeito, o branco final deve ter sido a diferença na linha do Ironman porque diff não faz mais diferença para essa linha. Isso deixa o Capitão América. Vamos perguntar diff ignore o caso e ignore todo o mundo problemas de espaço em branco.

colordiff -i -w -y -W 70 test4 test5

A saída de colordiff ignora todos os espaços em branco

Contando diff ignore as diferenças que não nos preocupam, diff nos diz que, para nossos propósitos, os arquivos combinam.

a diff O comando tem muito mais opções, mas a maioria deles está relacionada à produção de resultados legíveis por máquina. Estes podem ser revisados ​​no Linux página man. As alternativas que usamos nos exemplos acima permitirão que você rastreie todas as diferenças entre as versões de seus arquivos de texto, usando a linha de comando e olhos humanos.

setTimeout(função(){
!função(f,b,e,v,n,t,s)
{E se(f.fbq)Retorna;n = f.fbq = função(){n.callMethod?
n.callMethod.apply(n,argumentos):n.queue.push(argumentos)};
E se(!f._fbq)f._fbq = n;n.push = n;n.loaded =!0;n.version = ’2.0′;
n.queue =[];t = b.createElement(e);t.async =!0;
t.src = v;s = b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s) } (window, documento,'roteiro',
‘Https://connect.facebook.net/en_US/fbevents.js ’);
fbq('iniciar', ‘335401813750447’);
fbq('acompanhar', ‘PageView’);
},3000);

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.