Como comparar dois arquivos de texto no terminal Linux

Precisa ver as diferenças entre duas revisões de um arquivo de texto? Então diff é o comando que você precisa. Este tutorial mostra como usar o diff no Linux e no macOS, o caminho mais fácil.
Mergulhando no diff
comando compara dois arquivos e produz uma lista das diferenças entre os dois. Para ser mais preciso, ele produz uma lista das alterações que precisariam ser feitas no primeiro arquivo, para torná-lo compatível com o segundo arquivo. Se você tiver isso em mente, achará mais fácil entender a saída do diff. O comando diff foi projetado para encontrar diferenças entre os arquivos de código-fonte e produzir uma saída que poderia ser lida e usada por outros programas, como o comando patch. Neste tutorial, veremos as maneiras mais úteis para usar o diff.
Vamos mergulhar e analisar dois arquivos. A ordem dos arquivos na linha de comando determina qual arquivo considera o diff como "primeiro arquivo" e qual considera ser o "segundo arquivo". No exemplo abaixo, alpha1 é o primeiro arquivo, e alpha2 é o segundo arquivo. Ambos os arquivos contêm o alfabeto fonético, mas o segundo arquivo, alfa2, teve algumas edições adicionais para que os dois arquivos não sejam idênticos.
Podemos comparar os arquivos com este comando. Digite diff, um espaço, o nome do primeiro arquivo, um espaço, o nome do segundo arquivo e pressione Enter.
diff alpha1 alfa2

Como dissecamos essa saída? Depois de saber o que procurar, não é tão ruim assim. Cada diferença é listada por vez em uma única coluna e cada diferença é rotulada. O rótulo contém números de cada lado de uma carta, como 4c4. O primeiro número é o número da linha em alpha1 e o segundo número é o número da linha em alpha2. A letra no meio pode ser:
- c: A linha no primeiro arquivo precisa ser alterada para corresponder à linha no segundo arquivo.
- d: A linha no primeiro arquivo deve ser excluído para corresponder ao segundo arquivo.
- a: O conteúdo extra deve ser adicionado ao primeiro arquivo para que ele corresponda ao segundo arquivo.
O 4c4 em nosso exemplo nos diz que a linha quatro do alpha1 deve ser alterada para coincidir com a linha quatro do alpha2. Esta é a primeira diferença entre os dois arquivos que o diff encontrou.
Linhas que começam com < consulte o primeiro arquivo, em nosso exemplo alpha1, e as linhas que começam com > consulte o segundo arquivo, alpha2. A linha < Delta nos diz que a palavra Delta é o conteúdo da linha quatro em alpha1. A linha > Dave nos diz que a palavra Dave é o conteúdo da linha quatro em alpha2. Para resumir, precisamos substituir Delta por Dave na linha quatro em alpha1, para fazer essa linha coincidir 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 alteração se refere a uma linha que foi excluída de alpha2. O rótulo 21d20 é decifrado como “a linha 21 precisa ser excluída do primeiro arquivo para fazer com que ambos os arquivos sejam sincronizados a partir da linha 20 em diante”. O < Uma linha uniforme nos mostra o conteúdo da linha que precisa ser deletada de alpha1.
A quarta diferença é marcada 26a26,28. Essa alteração se refere a três linhas extras que foram adicionadas ao alpha2. Observe o 26,28 no rótulo. Os números de duas linhas separados por uma vírgula representam um intervalo de números de linhas. Neste exemplo, o intervalo é da linha 26 até a linha 28. O rótulo é interpretado como “na linha 26 do primeiro arquivo, adicione as linhas 26 a 28 do segundo arquivo”. São mostradas as três linhas em alpha2 que precisam ser adicionado ao alpha1. Eles contêm as palavras Quirk, Estranho e Encantamento.
Manchetes Rápidas
Se tudo que você quer saber é se dois arquivos são iguais, use -s (relatório arquivos idênticos) opção.
[PRÉ] diff -s alpha1 alpha3
IMAGEM_2
Você pode usar a opção -q (breve) para obter uma correspondência igualmente concisa declaração sobre dois arquivos sendo diferentes.
diff-q alpha1 alpha2
IMAGEM_3
Uma coisa a observar é que com dois arquivos idênticos A opção -q (breve) se fecha completamente e não informa nada.
Uma visão alternativa
A opção -y (lado a lado) usa um layout diferente para descrever as diferenças de arquivo. Geralmente é conveniente usar a opção -W (largura) com a vista lado a lado, para limitar o número de colunas exibidas. Isso evita linhas feias que tornam a saída difícil de ler. Aqui nós dissemos ao diff para produzir uma exibição lado a lado e limitar a saída a 70 colunas.
diff -y -W 70 alpha1 alpha2
IMAGEM_4
O primeiro arquivo na linha de comando, alpha1, é mostrado à esquerda e a segunda linha na linha de comando, alfa2, é mostrada à direita. As linhas de cada arquivo são exibidas lado a lado. Existem caracteres indicadores ao lado das linhas em alpha2 que foram alteradas, excluídas ou adicionadas.
- |: Uma linha que foi alterada no segundo arquivo.
- < : Uma linha que foi excluída do segundo arquivo.
- & gt ;: Uma linha que foi adicionada ao segundo arquivo que não está no primeiro arquivo.
Se você preferir um resumo lado a lado mais compacto das diferenças de arquivos, use a opção --suppress-common-lines. Isso força o diff a listar apenas as linhas alteradas, adicionadas ou excluídas.
diff -y -W 70 --suppress-common-lines alfa1 alpha2

Adicionar um Splash de Cor
Outro utilitário chamado colordiff adiciona destaque de cor à saída do diff. Isso torna muito mais fácil ver quais linhas têm diferenças.
Use o apt-get para instalar este pacote em seu sistema se você estiver usando o Ubuntu ou outra distribuição baseada no Debian. Em outras distribuições Linux, use a ferramenta de gerenciamento de pacotes da sua distribuição Linux.
sudo apt-get instala o colordiff
Use o colordiff como você usaria o diff.

Na verdade, colordiff é um wrapper para diff, e diff faz todo o trabalho por trás das cenas. Por causa disso, todas as opções de diferenças funcionarão com o colordiff.

Fornecendo algum contexto
Para encontrar um meio-termo entre ter todas as linhas Nos arquivos exibidos na tela e tendo apenas as linhas alteradas listadas, podemos pedir ao diff para fornecer algum contexto. Existem duas maneiras de fazer isso. Ambas as formas atingem o mesmo propósito, que é mostrar algumas linhas antes e depois de cada linha alterada. Você poderá ver o que está acontecendo no arquivo no local onde a diferença foi detectada.
O primeiro método usa a opção -c (contexto copiado).
[ PRE] colordiff -c alpha1 alpha2
IMAGEM_8
A saída do diff tem um cabeçalho. O cabeçalho lista os dois nomes de arquivos e seus horários de modificação. Há asteriscos (*) antes do nome do primeiro arquivo e traços (-) antes do nome do segundo arquivo. Os asteriscos e os traços serão usados para indicar em qual arquivo as linhas da saída pertencem.
Uma linha de asteriscos com 1,7 no meio indica que estamos olhando para as linhas de alpha1. Para ser preciso, estamos olhando para as linhas de um a sete. A palavra Delta é sinalizada como alterada. Tem um ponto de exclamação (!) Ao lado e é vermelho. Há três linhas de texto inalteradas exibidas antes e depois dessa linha para que possamos ver o contexto dessa linha no arquivo.
A linha de traços com 1,7 no meio nos diz que estamos agora olhando para linhas de alpha2. Novamente, estamos analisando as linhas de um a sete, com a palavra Dave na linha quatro marcada como sendo diferente.
Três linhas de contexto acima e abaixo de cada alteração são o valor padrão. Você pode especificar quantas linhas de contexto você deseja que o diff forneça. Para fazer isso, use a opção -C (contexto copiado) com um "C" maiúsculo e forneça o número de linhas que deseja:
colordiff -C2 alpha1 alpha2

A segunda opção de comparação que oferece contexto é a opção -u (contexto unificado).
colordiff -u alpha1 alpha2

Como antes, temos um cabeçalho na saída. Os dois arquivos são nomeados e seus tempos de modificação são mostrados. Há traços (-) antes do nome de alfa1 e sinais de mais (+) antes do nome de alpha2. Isso nos diz que os traços serão usados para se referir a sinais alpha1 e mais serão usados para se referir a alpha2. Espalhadas por toda a listagem, há linhas que começam com sinais (@). Essas linhas marcam o início de cada diferença. Eles também nos dizem quais linhas estão sendo mostradas de cada arquivo.
Nós mostramos as três linhas antes e depois da linha sinalizada como sendo diferentes, para que possamos ver o contexto da linha alterada. Na visão unificada, as linhas com a diferença são mostradas uma acima da outra. A linha de alpha1 é precedida por um traço e a linha de alpha2 é precedida por um sinal de mais. Essa tela atinge em oito linhas o que a exibição do contexto copiado acima levou quinze para fazer.
Como seria de esperar, podemos pedir ao diff para fornecer exatamente o número de linhas de contexto unificado que gostaríamos de ver . Para fazer isso, use a opção -U (contexto unificado) com um "U" maiúsculo e forneça o número de linhas que você deseja:
colordiff -U 2 alpha1 alpha2
IMAGEM_11
Ignorando espaço em branco e caso
Vamos analisar outros dois arquivos, test4 e test5. Estes têm os nomes dos seis super-heróis neles.
colordiff -y -W 70 teste4 test5

Os resultados mostram que o diff não encontra nada diferente com as linhas da Viúva Negra, Homem-Aranha e Thor. Ele sinaliza mudanças com as linhas do Capitão América, Ironman e The Hulk.
Então, o que é diferente? Bem, no test5 Hulk é escrito com letra minúscula “h” e o Capitão América tem um espaço extra entre “Capitão” e “América”. OK, está claro, mas o que há de errado com a linha Ironman? Não há diferenças visíveis. Aqui está uma boa regra de ouro. Se você não consegue ver, a resposta é o espaço em branco. Há quase certamente um espaço perdido ou dois, ou um caractere de tabulação, no final dessa linha.
Se eles não são importantes para você, você pode instruir o diff para ignorar tipos específicos de diferença de linha, incluindo :
- -i: Ignora diferenças no caso.
- -Z: Ignora o espaço em branco à direita.
- -b: Ignora alterações na quantidade de espaço em branco.
- -w: Ignore todas as alterações no espaço em branco.
Vamos pedir ao diff para verificar esses dois arquivos novamente, mas desta vez ignorar quaisquer diferenças no caso.
colordiff -i -y -W 70 teste4 test5

As linhas com "The Hulk" e "The hulk" agora são consideradas uma correspondência, e nenhuma diferença é marcada para "h" em minúsculas. Vamos pedir ao diff para também ignorar espaços em branco à direita.
colordiff -i -Z -y -W70 test4 test5

Como suspeitamos, o espaço em branco à direita deve ter sido a diferença na linha Ironman porque o diff não sinaliza mais uma diferença para essa linha. Isso deixa o Capitão América. Vamos pedir ao diff para ignorar o caso e ignorar todos os problemas do espaço em branco.
colordiff -i -w -y -W 70 teste4 test5

Ao dizer ao diff para ignorar as diferenças com as quais não estamos preocupados, o diff nos diz que, para nossos propósitos, os arquivos combinam.
O comando diff tem muito mais opções, mas a maioria delas se relaciona para produzir saída legível por máquina. Estes podem ser revistos na página man do Linux. As opções que usamos nos exemplos acima permitem que você rastreie todas as diferenças entre as versões de seus arquivos de texto, usando a linha de comando e os olhos humanos.
Via: How to Geek
Nenhum comentário