diff 출력 이해


87

나는 가지고있다 file1.txt

this is the original text  
line2  
line3  
line4  
happy hacking !  

file2.txt

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

내가하면 : diff file1.txt file2.txt나는 얻는다 :

3d2  
< line3  
5a5  
> GNU is not UNIX  

결과는 일반적으로 어떻게 해석됩니까? 나는 그 생각 <제거 의미하지만 무엇을 할 3d2또는 5a5의미?

만약 내가한다면:

$ 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  

결과가 더 명확하지만 무엇을 @@ -1,5 +1,5 @@의미합니까?

답변:


96

첫 번째 diff출력 (소위 "normall diff")에서 의미는 다음과 같습니다.

< -file1.txt의 행을 나타냅니다

> -file2.txt의 행을 나타냅니다

3d25a5행 번호가 영향과 행동이 수행 된 나타낸다. d삭제, a추가 (및 c변경)를 나타냅니다. 문자 왼쪽의 숫자는 file1.txt의 줄 번호이고 오른쪽의 숫자는 file2.txt의 줄 번호입니다. 따라서 3d2file1.txt의 세 번째 줄이 삭제되었고 file2.txt의 줄 번호 2가 있음을 알려줍니다 (또는 삭제 후 줄 카운터가 줄 번호 2로 돌아 갔다고 말하는 것이 좋습니다). 5a5우리는 file1.txt의 줄 번호 5에서 시작했으며 (이전 작업에서 줄을 삭제 한 후에 실제로 비어 있음) 줄을 추가 했으며이 추가 된 줄은 file2.txt의 번호 5입니다.

diff -u명령 의 출력은 약간 다르게 형식화됩니다 ( "통합 diff"형식이라고 함). 여기 diff에 두 개의 별도 텍스트 대신 단일 텍스트가 표시됩니다. 라인 @@ -1,5 +1,5 @@에서 파트 -1,5는 file1.txt와 관련되고 파트 +1,5는 file2.txt 와 관련됩니다 . 그들은 difffile1.txt의 줄 번호 1에서 시작하여 5 줄 길이의 텍스트를 보여 줄 것이라고 말합니다 . file2.txt에 대해서도 마찬가지 diff입니다. 1 행부터 5 행을 보여줍니다.

이미 말했듯이 두 파일의 줄이 함께 표시됩니다.

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

여기 -에서 file1.txt에서 삭제 된 +행과 추가 된 행을 나타냅니다.


25

요약 :

주어진 diff file1 file2, <라인이 누락 된 것을 의미 file2하고 >라인이 실종을 의미합니다 file1. 3d25a5무시할 수 있습니다, 그들은을위한 명령입니다 patch종종 사용됩니다 diff.

전체 답변 :

많은 * nix 유틸리티는 TeXinfo 매뉴얼과 간단한 man페이지를 제공합니다. info command예를 들어 다음을 실행하여 액세스 할 수 있습니다 info diff. 이 경우 관심있는 섹션은 다음과 같습니다.

2.4.2 일반 형식에 대한 자세한 설명


일반 출력 형식은 하나 이상의 차이로 구성됩니다. 각 덩어리는 파일이 다른 하나의 영역을 보여줍니다. 일반 형식 덩어리는 다음과 같습니다.

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

변경 명령에는 세 가지 유형이 있습니다. 각각은 첫 번째 파일에서 줄 번호 또는 쉼표로 구분 된 줄 범위, 변경 종류를 나타내는 단일 문자 및 두 번째 파일에서 줄 번호 또는 쉼표로 구분 된 줄 범위로 구성됩니다. 모든 줄 번호는 각 파일의 원래 줄 번호입니다. 변경 명령의 유형은 다음과 같습니다.

`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

4

나는 사용하는 것이 좋습니다 :

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

그런 다음을 읽으면 result.patch차이점을 즉시 알게됩니다.

다음은 명령 행 스위치의 의미입니다.

-r : 재귀

-u : 줄 번호를 보여줍니다

-p (작음) : C 함수의 차이를 보여줍니다.

-P (자본) : 여러 파일의 경우 전체 경로가 표시됩니다


3

위의 답변이 좋습니다. 그러나 초보자로서 이해하기가 다소 어려웠으며 추가 검색시 매우 유용한 링크를 찾았습니다 .Linux Diff Command & Examples

이 사이트는 개념을 간단하고 이해하기 쉬운 방식으로 설명합니다.

다음과 같이 생각하면 Diff 명령을 이해하는 것이 더 쉽습니다.

기본적으로 하나의 파일을 변경하여 두 번째 파일과 동일하게 만드는 방법에 대한 지침을 출력합니다.

다음 각 경우에 대해 잘 설명되어 있습니다.

a 추가, c 변경, d 삭제


2

기억할 수 있도록 이름을 바꾸십시오!

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

결과 는 편집 할 파일 (file1)에서 작동하여 다양한 업데이트를 적용합니다.


마찬가지로, 이러한 이름 변경은 결과를 개념화하는 데 도움이됩니다.

삭제 = '제거'& 추가 = '삽입'.

2,4d1 --- D (s) -d -N --- d elete ( ' 제거 ') D 줄. 그런 다음 두 줄의 N 줄에서 동기화하십시오.

4a2,4 --- N- a -U (s) --- N 행 에서 dd ( ' insert ') 업데이트 행 U

참고 : 거의 대칭입니다.


변경 = '제거 및 삽입'.

2,4c5,6 --- R (들) -c -U (들) --- R (들) 줄을 제거한 다음 업데이트 된 줄 U를 그 자리에 삽입하십시오.



예를 들면 다음과 같습니다.

4a2,4 --- 4에서 시작하여 업데이트 된 행 2-4를 추가합니다 (예 : 2,4는 2, 3 및 4를 의미합니다)

2,4d1 --- 라인 2-4를 제거합니다.

2,4c5,6 --- 2-4 행을 제거하고 업데이트 된 행 5-6을 삽입하십시오


  • 나는 이것이 스트림 편집기 명령이며 기계에 의해 처리되도록 설계되었음을 알고 있습니다. 예를 들어 실제로는 삽입이 아닌 ed 명령 add이지만 최종적으로 파일에 수행되는 삽입을 생각하는 것이 더 도움이됩니다. 그들은 스트림 작업을 사용하지만 결과 측면에서 생각하고 싶습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.