Android

Comando Diff no Linux

Linux команда diff - команда сравнения текстовых файлов.

Linux команда diff - команда сравнения текстовых файлов.

Índice:

Anonim

diff é um utilitário de linha de comando que permite comparar dois arquivos linha por linha. Também pode comparar o conteúdo dos diretórios.

O comando diff é mais comumente usado para criar um patch contendo as diferenças entre um ou mais arquivos que podem ser aplicados usando o comando patch .

Como usar o comando diff

A sintaxe para o comando diff é a seguinte:

diff… FILES

O comando diff pode exibir a saída em vários formatos, sendo os formatos normal, de contexto e unificado os mais comuns. A saída inclui informações sobre quais linhas nos arquivos devem ser alteradas para que se tornem idênticas. Se os arquivos corresponderem, nenhuma saída será produzida.

Para salvar a saída do comando em um arquivo, use o operador de redirecionamento:

diff file1 file2 > patch

, usaremos os dois arquivos a seguir para explicar como o comando diff funciona:

file1

Ubuntu Arch Linux Debian CentOS Fedora arquivo2

Kubuntu Ubuntu Debian Arch Linux Centos Fedora

Formato Normal

Em sua forma mais simples, quando o comando diff é executado em dois arquivos de texto sem nenhuma opção, ele produz uma saída no formato normal:

diff file1 file2

A saída será mais ou menos assim:

0a1 > Kubuntu 2d2 < Arch Linux 4c4, 5 < CentOS --- > Arch Linux > Centos

O formato de saída normal consiste em uma ou mais seções que descrevem as diferenças. Cada seção é assim:

change-command < from-file-line… --- > to-file-line…

0a1 , 2d2 e 4c4, 5 são comandos de alteração. Cada comando de alteração contém o seguinte, da esquerda para a direita:

  • O número da linha ou o intervalo de linhas no primeiro arquivo. Um caractere de alteração especial. O número da linha ou o intervalo de linhas no segundo arquivo.

O caractere de alteração pode ser um dos seguintes:

  • a - Adicione as linhas. c - Mude as linhas. d - Exclua as linhas.

O comando change é seguido pelas linhas completas que são removidas ( < ) e adicionadas ao arquivo ( > ).

Vamos explicar a saída:

  • 0a1 - Adicione a linha 1 do segundo arquivo no início do arquivo1 (após a linha 0 ).
    • > Kubuntu - A linha da segunda linha que é adicionada ao primeiro arquivo, conforme descrito acima.
    2d2 - Exclua a linha 2 no primeiro arquivo. O símbolo 2 após o d significa que, se a linha não for excluída, ela aparecerá na linha 2 no segundo arquivo.
    • < Arch Linux - a linha excluída.
    4c4, 5 - Substitua (altere) a linha 5 no primeiro arquivo pelas linhas 4-5 do segundo arquivo.
    • < CentOS - A linha no primeiro arquivo a ser substituído. --- - Separador. > Arch Linux e > Centos - Linhas do segundo arquivo substituindo a linha no primeiro arquivo.

Formato de Contexto

Quando o formato de saída de contexto é usado, o comando diff exibe várias linhas de contexto em torno das linhas que diferem entre os arquivos.

A opção -c diz ao diff para produzir saída no formato de contexto:

diff -c file1 file2

*** file1 2019-11-25 21:00:26.422426523 +0100 --- file2 2019-11-25 21:00:36.342231668 +0100 *************** *** 1, 6 **** Ubuntu - Arch Linux Debian ! CentOS Fedora --- 1, 7 ---- + Kubuntu Ubuntu Debian ! Arch Linux ! Centos Fedora

A saída começa com os nomes e os carimbos de data e hora, se os arquivos são comparados e uma ou mais seções que descrevem as diferenças. Cada seção é assim:

*************** *** from-file-line-numbers **** from-file-line… --- to-file-line-numbers ---- to-file-line…

  • from-file-line-numbers to-file-line-numbers - Os números de linha ou o intervalo de linhas separadas por vírgula no primeiro e no segundo arquivo, respectivamente. from-file-line e to-file-line - As linhas que diferem e as linhas de contexto:
    • As linhas que começam com dois espaços são linhas de contexto, as linhas iguais nos dois arquivos. As linhas que começam com o símbolo de menos ( - ) são as linhas que não correspondem a nada no segundo arquivo. Linhas ausentes no segundo arquivo. Linhas começando com o símbolo de mais ( + ) são as linhas que não correspondem a nada no primeiro arquivo. Linhas ausentes no primeiro arquivo. Linhas que começam com o ponto de exclamação ( ! ) São as linhas que são alteradas entre dois arquivos. Cada grupo de linhas começando com ! do primeiro arquivo tem uma correspondência correspondente no segundo arquivo.

Vamos explicar as partes mais importantes da saída:

  • Neste exemplo, temos apenas uma seção descrevendo as diferenças. *** 1, 6 **** e --- 1, 7 ---- nos informa o alcance das linhas do primeiro e do segundo arquivos incluídos nesta seção. Linhas Ubuntu , Debian , Fedora e última linha vazia são iguais nos dois arquivos. Essas linhas estão começando com espaço duplo. Linha - Arch Linux partir do primeiro arquivo não corresponde a nada no segundo arquivo. Embora essa linha também exista no segundo arquivo, as posições são diferentes.Linha + Kubuntu do segundo arquivo não corresponde a nada no primeiro arquivo.Linha ! CentOS ! CentOS do primeiro arquivo e linhas ! Arch Linux ! Arch Linux e ! CentOS ! CentOS do segundo arquivo é alterado entre os arquivos.

Por padrão, o número de linhas de contexto é padronizado para três. Para especificar outro número, use a opção -C ( --contexts ):

diff -C 1 file1 file2

*** file1 2019-11-25 21:00:26.422426523 +0100 --- file2 2019-11-25 21:00:36.342231668 +0100 *************** *** 1, 5 **** Ubuntu - Arch Linux Debian ! CentOS Fedora --- 1, 6 ---- + Kubuntu Ubuntu Debian ! Arch Linux ! Centos Fedora

Formato unificado

O formato de saída unificado é uma versão aprimorada do formato de contexto e produz uma saída menor.

Use a opção -u para dizer ao diff para imprimir a saída no formato unificado:

diff -u file1 file2

--- file1 2019-11-25 21:00:26.422426523 +0100 +++ file2 2019-11-25 21:00:36.342231668 +0100 @@ -1, 6 +1, 7 @@ +Kubuntu Ubuntu -Arch Linux Debian -CentOS +Arch Linux +Centos Fedora

A saída começa com os nomes e os carimbos de data e hora dos arquivos e uma ou mais seções que descrevem as diferenças. Cada seção tem o seguinte formato:

*************** @@ from-file-line-numbers to-file-line-numbers @@ line-from-files…

  • @@ from-file-line-numbers to-file-line-numbers @@ - O número da linha ou o intervalo das linhas do primeiro e do segundo arquivos incluídos nesta seção. line-from-files - As linhas que diferem e as linhas de contexto:
    • As linhas que começam com dois espaços são linhas de contexto, as linhas iguais nos dois arquivos. As linhas que começam com o símbolo de menos ( - ) são as linhas removidas do primeiro arquivo. As linhas que começam com o símbolo de mais ( + ) são as linhas que são adicionadas do primeiro arquivo.

Ignorar caso

Como você pode observar nos exemplos acima, o comando diff maiúsculas de minúsculas por padrão.

Use a opção -i para dizer ao diff para ignorar maiúsculas e minúsculas:

diff -ui file1 file2

--- file1 2019-11-25 21:00:26.422426523 +0100 +++ file2 2019-11-25 21:00:36.342231668 +0100 @@ -1, 6 +1, 7 @@ +Kubuntu Ubuntu -Arch Linux Debian +Arch Linux CentOS Fedora

Conclusão

Comparar arquivos de texto para diferenças é uma das tarefas mais comuns para administradores de sistemas Linux.

O comando diff compara os arquivos linha por linha. Para mais informações, digite man diff em seu terminal.

terminal diff