desenv-web-rp.com

Compreensão da saída diff

Eu tenho file1.txt

this is the original text  
line2  
line3  
line4  
happy hacking !  

e file2.txt

this is the original text  
line2  
line4  
happy hacking !  
GNU is not UNIX  

se eu fizer: diff file1.txt file2.txt Eu recebo:

3d2  
< line3  
5a5  
> GNU is not UNIX  

Como a saída é geralmente interpretada? Eu penso isso < significa removido, mas o que faz 3d2 ou 5a5 significar?

Se eu fizer:

$ diff -u file1.txt file2.txt  
--- file1.txt        2013-07-06 17:44:59.180000000 +0200  
+++ file2.txt        2013-07-06 17:39:53.433000000 +0200  
@@ -1,5 +1,5 @@  
 this is the original text  
 line2  
-line3  
 line4  
 happy hacking !  
+GNU is not UNIX  

Os resultados são mais claros, mas o que faz @@ -1,5 +1,5 @@ significar?

106
Jim

Na sua primeira saída diff (chamada "normall diff"), o significado é o seguinte

< - indica linhas no arquivo1.txt

> - indica linhas no arquivo2.txt

3d2 e 5a5 indicam os números de linha afetados e quais ações foram executadas. d significa exclusão, a significa adição (e c significa alteração). o número à esquerda do caractere é o número da linha no arquivo1.txt, o número à direita é o número da linha no arquivo2.txt. Assim 3d2 informa que a 3ª linha do arquivo1.txt foi excluída e possui o número da linha 2 no arquivo2.txt (ou melhor, dizer que após a exclusão, o contador de linhas voltou à linha número 2). 5a5 informa que começamos a partir da linha número 5 no arquivo1.txt (que na verdade estava vazio após a exclusão de uma linha na ação anterior), adicionamos a linha e essa linha adicionada é o número 5 no arquivo2.txt.

A saída de diff -u O comando é formatado de maneira um pouco diferente (o chamado formato "diff unificado"). Aqui diff nos mostra uma única parte do texto, em vez de dois textos separados. Na linha @@ -1,5 +1,5 @@ a parte -1,5 refere-se a file1.txt e a parte +1,5 para file2.txt. Eles nos dizem que diff mostrará um pedaço de texto, com 5 linhas, começando na linha 1 do arquivo1.txt. E o mesmo sobre o arquivo2.txt - diff nos mostra 5 linhas começando na linha 1.

Como eu já disse, as linhas dos dois arquivos são mostradas juntas

 this is the original text  
 line2  
-line3  
 line4  
 happy hacking !  
+GNU is not UNIX  

Aqui - denota as linhas que foram excluídas do arquivo1.txt e + denota as linhas que foram adicionadas.

113
John Smith

Resumo:

Dado um diff file1 file2, < significa que a linha está ausente em file2 e > significa que a linha está ausente em file1. O 3d2 e 5a5 podem ser ignorados, são comandos para patch que geralmente são usados ​​com diff.

Resposta completa:

Muitos utilitários * nix oferecem manuais do TeXinfo, bem como as páginas man mais simples. você pode acessá-los executando info command, por exemplo info diff. Nesse caso, a seção em que você está interessado é:

2.4.2 Descrição detalhada do formato normal


O formato de saída normal consiste em um ou mais pedaços de diferenças; cada pedaço mostra uma área em que os arquivos diferem. Pedaços de formato normal ficam assim:

 CHANGE-COMMAND
 < FROM-FILE-LINE
 < FROM-FILE-LINE...
 ---
 > TO-FILE-LINE
 > TO-FILE-LINE...

Existem três tipos de comandos de alteração. Cada um consiste em um número de linha ou intervalo de linhas separado por vírgula no primeiro arquivo, um único caractere indicando o tipo de alteração a ser feito e um número de linha ou intervalo de linhas separado por vírgula no segundo arquivo. Todos os números de linha são os números de linha originais em cada arquivo. Os tipos de comandos de alteração são:

`LaR'
     Add the lines in range R of the second file after line L of the
     first file.  For example, `8a12,15' means append lines 12-15 of
     file 2 after line 8 of file 1; or, if changing file 2 into file 1,
     delete lines 12-15 of file 2.

`FcT'
     Replace the lines in range F of the first file with lines in range
     T of the second file.  This is like a combined add and delete, but
     more compact.  For example, `5,7c8,10' means change lines 5-7 of
     file 1 to read as lines 8-10 of file 2; or, if changing file 2 into
     file 1, change lines 8-10 of file 2 to read as lines 5-7 of file 1.

`RdL'
     Delete the lines in range R from the first file; line L is where
     they would have appeared in the second file had they not been
29
terdon

Sugiro usar:

diff -rupP file1.txt file2.txt > result.patch

Então, quando você ler result.patch, você saberá instantaneamente a diferença.

Estes são os significados das opções da linha de comandos:

- r: recursivo

-: mostra o número da linha

- p (pequeno): mostra diferenças nas funções C

- P (capital): no caso de vários arquivos, o caminho completo é mostrado

5
Ravi

As respostas acima são boas. No entanto, como iniciante, achei-os um pouco difíceis de entender e, ao pesquisar mais, encontrei um link muito útil: Comando e exemplos do Linux Diff

O site explica o conceito de maneira simples e fácil de entender.

O comando Diff é mais fácil de entender se você o considerar desta maneira:

Essencialmente, ele fornece um conjunto de instruções sobre como alterar um arquivo para torná-lo idêntico ao segundo arquivo.

Cada um dos seguintes casos é bem explicado:

a para adicionar, c para alterar, d para excluir

5
userAsh

Renomeie as coisas para ajudá-lo a se lembrar!

diff  <file-to-edit>  <file-with-updates>   #Rather than diff f1 f2

Os resultados operam no arquivo a ser editado (arquivo1), aplicando várias atualizações nele.


Semelhança, acho essas renomeações úteis para conceituar os resultados:

Excluir = 'remover' e Adicionar = 'inserir'.

2,4d1 --- D (s) -d - N --- d elete ('remove') D (s) linha (s) . Em seguida, sincronize na linha N em ambos.

4a2,4 --- N -a - U (s) --- Na linha N, a dd ('inserir') atualizações linha (s) U

Nota: Eles são quase simétricos.


Alterar = 'remover e inserir'.

2,4c5,6 --- R (s) -c - U (s) --- Remover R(s) linhas, em seguida, inserir linhas atualizadas = U(s) em seu lugar.



Por exemplo:

4a2,4 --- a partir de 4, adicione (insira) as linhas 2-4 atualizadas (ou seja, 2,4 significa 2, 3 e 4)

2,4d1 --- remova as linhas 2-4.

2,4c5,6 --- remova as linhas 2-4 e insira as linhas atualizadas 5-6


  • Eu sei que esses são comandos do editor de fluxo e projetados para serem processados ​​por uma máquina. Por exemplo, é realmente o comando ed add, não insert, mas é mais útil pensar em insert, que é o que, no final, está sendo feito no arquivo. Eles usam operações de fluxo, mas eu gosto de pensar em termos de resultados.

4
Elliptical view