SlideShare a Scribd company logo
1 of 34
Download to read offline
diff Output Formats



                      안오균
diff
$ diff foo bar

• 두 파일을 라인 단위로 비교한다.
• diff <원본 파일> <새 파일>
diff Output Formats
• diff의 대표적인 출력 포맷은 다음과 같다.

  – Normal Format
  – Context Format
  – Unified Format
Normal Format
$ diff foo bar

• diff의 기본 출력 옵션으로,
• 두 파일의 변경된 라인만 출력한다.
• 변경된 부분을 명확하게 파악할 수 있지만,
  변경된 라인 주변의 데이터 파악이 어렵다.
예제 텍스트
<원본 파일:foo>   <새 파일:bar>
1 Hello,      1 Hello,
2 I am foo.   2 I am bar.
3 a           3 a
4 b           4 c
5 c           5 d
6 d           6 e
7 e           7 f
8             8 g
              9
Normal Format: 출력 예제
$ diff foo bar
2c2
< I am foo.
---
> I am bar.
4d3
< b
7a7,8
> f
> g
Normal Format: 출력 형태
• 변경 상태를 나타내는 키워드 이후에,
  원본 파일과 새 파일의 라인을 번갈아 출력한다.

 변경 키워드
 < 원본 파일 라인
 < 원본 파일 라인...
 ---
 > 새 파일 라인
 > 새 파일 라인...
Normal Format: 변경 키워드
• 변경 키워드는 변경의 상태를 나타내는 것으로,
  추가/삭제/변경을 의미하는 a,d,c가 있다.

 a : 추가(added)
 d : 삭제(deleted)
 c : 변경(changed)
Normal Format: added
추가됨(added)

형태: (1)a[2]
예제: 7a7,8
의미:
 원본 파일의 (1)라인 이후에,
 새 파일의 범위 [2]만큼의 라인이 추가됨.
Normal Format: changed
변경됨(changed)

형태: [1]c[2]
예제: 5,7c8,10
의미:
 원본 파일의 범위 [1]만큼의 라인이,
 새 파일의 범위 [2]만큼의 라인으로 변경됨.
Normal Format: deleted
삭제됨(deleted)

형태: [1]d(2)
예제: 5,7d3
의미:
 원본 파일의 범위 [1]만큼의 라인이 삭제됨.
 새 파일의 (2)라인에 해당함.
Normal Format: 출력 예제(상세)
$ diff foo bar
2c2 # 원본 파일의 2라인이 새 파일의 2라인으로 변경됨
< I am foo. # 원본 파일 라인(삭제됨)
---
> I am bar. # 새 파일 라인(추가됨)
4d3 # 원본 파일의 4라인이 삭제됨
< b
7a7,8 # 원본의 7라인에 새 파일의 7,8라인이 추가됨
> f
> g
Context Format
$ diff -c foo bar

• `-c` 옵션을 사용하며,
  변경된 라인 전/후의 라인을 함께 출력한다.
• 변경된 라인의 주변을 확인할 수 있기 때문에,
  정확하게 어떤 것이 변경되었는지 파악할 수 있다.
• 주로 소스코드를 배포할 때 사용한다.
• `-C 라인수`, `--context[=라인수]` 옵션으로,
  출력할 주변 라인의 개수를 설정할 수 있다.
  (기본 3개)
예제 텍스트
<원본 파일:foo>   <새 파일:bar>
1 Hello,      1 Hello,
2 I am foo.   2 I am bar.
3 a           3 a
4 b           4 c
5 c           5 d
6 d           6 e
7 e           7 f
8             8 g
              9
Context Format: 출력 예제
$ diff -c foo bar    (좌측에서 계속)
*** foo 2013-01-29   --- 1,8 ----
--- bar 2013-01-29     Hello,
***************      ! I am bar,
*** 1,7 ****           a
  Hello,               c
! I am foo.            d
  a                    e
- b                  + f
  c                  + g
  d
  e
Context Format: 출력 예제
$ diff -C 1 foo bar   (좌측에서 계속)
*** foo 2013-01-29    ! I am bar,
--- bar 2013-01-29      a
***************         c
*** 1,5 ****          ***************
  Hello,              *** 7 ****
! I am foo,           --- 6,8 ----
  a                     e
- b                   + f
  c                   + g
--- 1,4 ----
  Hello,
Context Format: 출력 형태
• 각 파일의 이름과 수정시각을 나타내는 헤더 이후에,
  각 파일에서 변경된 라인 부분을 출력한다.
• 옵션으로 넘긴 라인수만큼(기본 3개),
  변경된 라인의 전/후 라인도 함께 출력한다.

 *** 원본파일 수정시각
 --- 새파일 수정시각
 ***************
 *** 원본 파일 범위 ****
 [변경 키워드] 원본 파일 라인
 --- 새 파일 범위 ----
 [변경 키워드] 새 파일 라인
Context Format: 변경 키워드
• 각 파일에서 변경된 라인은,
  변경 키워드와 공백 이후에 출력된다.
  변경되지 않은 라인은 2개의 공백 이후 출력한다.

• 변경    키워드는 다음과 같다.
  ! :   변경됨
  + :   새 파일에 추가됨
  - :   원본 파일에서 삭제됨
Context Format: 출력 예제(상세)
$ diff -c foo bar
*** foo 2013-01-29 # 원본 파일의 이름과 수정 시각
--- bar 2013-01-29 # 새 파일의 이름과 수정 시각
***************
*** 1,7 **** # 원본 파일의 1~7라인이 변경됨
  Hello,
! I am foo. # 변경된 라인
  a
- b # 삭제된 라인
  c # 변경된 라인 주변 3라인을 출력 (첫번째 라인)
  d # (두번째 라인)
  e # (세번째 라인)
Context Format: 출력 예제(상세)
(이전 페이지에서 계속)
--- 1,8 ----
  Hello,
! I am bar, # 변경된 라인
  a
  c # 변경된 라인 전/후로 3라인이 여기까지 겹치므로,
  d # 모두 한 번에 출력된다.
  e
+ f # 추가된 라인
+ g # 추가된 라인
Context Format: 출력 예제(상세)
$ diff -C 1 foo bar # 주변 라인 1개까지만 출력한다.
*** foo 2013-01-29
--- bar 2013-01-29
***************
*** 1,5 ****
  Hello,
! I am foo,
  a
- b
  c # 변경 라인 이후의 1개 라인만 출력됨
--- 1,4 ----
  Hello,
Context Format: 출력 예제(상세)
(이전 페이지에서 계속)
! I am bar,
  a
  c
***************
*** 7 **** # 주변 라인을 1개만 출력하면 변경 부분이
--- 6,8 ---- # 겹치지 않으므로, 분리해 출력한다.
  e # 마찬가지로, 변경 라인 전의 1라인만 출력됨
+ f
+ g # 변경 라인이자 파일의 마지막이다
Unified Format
$ diff -u foo bar

• `-u` 옵션을 사용하며,
  `-U 라인수`, `--unified[=라인수]` 옵션으로
  주변 라인 개수를 설정할 수 있다.
• Context Format과 비슷하지만,
  변경된 부분의 주변 라인의 중복을 제거하고,
  두 파일의 변화를 한 번에 볼 수 있어 간략하다.
예제 텍스트
<원본 파일:foo>   <새 파일:bar>
1 Hello,      1 Hello,
2 I am foo.   2 I am bar.
3 a           3 a
4 b           4 c
5 c           5 d
6 d           6 e
7 e           7 f
8             8 g
              9
Unified Format: 출력 예제
$ diff -u foo bar    (좌측에서 계속)
--- foo 2013-01-29   +f
+++ bar 2013-01-29   +g
@@ -1,7 +1,8 @@
 Hello,
-I am foo.
+I am bar.
 a
-b
 c
 d
 e
Unified Format: 출력 예제
$ diff -U 1 foo bar   (좌측에서 계속)
--- foo 2013-01-29    +f
+++ bar 2013-01-29    +g
@@ -1,5 +1,4 @@
 Hello,
-I am foo.
+I am bar.
 a
-b
 c
@@ -7 +6,3
 e
Unified Format: 출력 형태
• 각 파일의 이름과 수정시각을 나타내는 헤더 이후에,
  두 파일의 변경 부분을 함께 출력한다.
• 변경 부분의 시작에는 각 파일의 변경 범위를 출력하고,
  이후에 각 라인이 출력된다.

 --- 원본파일 수정시각
 +++ 새파일 수정시각
 @@ -원본파일범위 +새파일범위 @@
 [변경 키워드]각 파일의 라인
Unified Format: 변경 키워드
• 출력되는 각 라인은,
  변경된 경우 변경 키워드로 시작하고,
  변경되지 않은 경우 공백으로 시작한다.

• 변경 키워드는 다음과 같다.
  + : 새 파일에 추가됨
  - : 원본 파일에서 삭제됨
Unified Format: 출력 예제(상세)
$ diff -u foo bar
--- foo 2013-01-29
+++ bar 2013-01-29
@@ -1,7 +1,8 @@ # 원본파일의 1,7라인이
 Hello,         # 새 파일의 1,8라인으로 변경됨
-I am foo. # 원본 파일에서 삭제되고,
+I am bar. # 새 파일에 추가됨.
 a
-b # 변경 키워드 이후에 바로 라인이 출력되고,
 c # 변경되지 않은 경우 공백 이후에 출력됨
 d
 e
Unified Format: 출력 예제(상세)
(이전 페이지에서 계속)
+f
+g
Unified Format: 출력 예제(상세)
$ diff -U 1 foo bar # 주변 라인을 1라인만 출력함
--- foo 2013-01-29
+++ bar 2013-01-29
@@ -1,5 +1,4 @@
 Hello,
-I am foo.
+I am bar.
 a
-b
 c # 변경 라인 이후 1개 라인까지만 출력
@@ -7 +6,3 # 주변 라인의 개수가 1라인이므로,
 e         # 변경 부분을 분리해서 출력함
Unified Format: 출력 예제(상세)
(이전 페이지에서 계속)
+f
+g
정리
• diff의 대표적인 출력 포맷은 다음과 같다.

 Normal Format: diff foo bar
 Context Format: diff -c foo bar
 Unified Format: diff -u foo bar
참고
• http://unixhelp.ed.ac.uk/CGI/man-cgi?diff
• http://en.wikipedia.org/wiki/Diff
• http://www.chemie.fu-
  berlin.de/chemnet/use/info/diff/diff_3.html#SEC10

More Related Content

More from Ohgyun Ahn

JavaScript Memory Profiling
JavaScript Memory ProfilingJavaScript Memory Profiling
JavaScript Memory ProfilingOhgyun Ahn
 
JavaScript Minification
JavaScript MinificationJavaScript Minification
JavaScript MinificationOhgyun Ahn
 
JavaSript Template Engine
JavaSript Template EngineJavaSript Template Engine
JavaSript Template EngineOhgyun Ahn
 
Github Usage Scenarios
Github Usage ScenariosGithub Usage Scenarios
Github Usage ScenariosOhgyun Ahn
 
Javascript hoisting
Javascript hoistingJavascript hoisting
Javascript hoistingOhgyun Ahn
 
패키지 매니저의 요건
패키지 매니저의 요건패키지 매니저의 요건
패키지 매니저의 요건Ohgyun Ahn
 
BASH Guide Summary
BASH Guide SummaryBASH Guide Summary
BASH Guide SummaryOhgyun Ahn
 
Python Usage (5-minute-summary)
Python Usage (5-minute-summary)Python Usage (5-minute-summary)
Python Usage (5-minute-summary)Ohgyun Ahn
 
UX 심포지엄 20120 키노트 정리
UX 심포지엄 20120 키노트 정리UX 심포지엄 20120 키노트 정리
UX 심포지엄 20120 키노트 정리Ohgyun Ahn
 
크롬익스텐션 맛보기
크롬익스텐션 맛보기크롬익스텐션 맛보기
크롬익스텐션 맛보기Ohgyun Ahn
 
재미있는 생산성 향상 도구
재미있는 생산성 향상 도구재미있는 생산성 향상 도구
재미있는 생산성 향상 도구Ohgyun Ahn
 
Raphael.js로 SVG 차트 만들기
Raphael.js로 SVG 차트 만들기Raphael.js로 SVG 차트 만들기
Raphael.js로 SVG 차트 만들기Ohgyun Ahn
 
깃헙으로 코드리뷰 하기
깃헙으로 코드리뷰 하기깃헙으로 코드리뷰 하기
깃헙으로 코드리뷰 하기Ohgyun Ahn
 
Recurrence relation
Recurrence relationRecurrence relation
Recurrence relationOhgyun Ahn
 

More from Ohgyun Ahn (14)

JavaScript Memory Profiling
JavaScript Memory ProfilingJavaScript Memory Profiling
JavaScript Memory Profiling
 
JavaScript Minification
JavaScript MinificationJavaScript Minification
JavaScript Minification
 
JavaSript Template Engine
JavaSript Template EngineJavaSript Template Engine
JavaSript Template Engine
 
Github Usage Scenarios
Github Usage ScenariosGithub Usage Scenarios
Github Usage Scenarios
 
Javascript hoisting
Javascript hoistingJavascript hoisting
Javascript hoisting
 
패키지 매니저의 요건
패키지 매니저의 요건패키지 매니저의 요건
패키지 매니저의 요건
 
BASH Guide Summary
BASH Guide SummaryBASH Guide Summary
BASH Guide Summary
 
Python Usage (5-minute-summary)
Python Usage (5-minute-summary)Python Usage (5-minute-summary)
Python Usage (5-minute-summary)
 
UX 심포지엄 20120 키노트 정리
UX 심포지엄 20120 키노트 정리UX 심포지엄 20120 키노트 정리
UX 심포지엄 20120 키노트 정리
 
크롬익스텐션 맛보기
크롬익스텐션 맛보기크롬익스텐션 맛보기
크롬익스텐션 맛보기
 
재미있는 생산성 향상 도구
재미있는 생산성 향상 도구재미있는 생산성 향상 도구
재미있는 생산성 향상 도구
 
Raphael.js로 SVG 차트 만들기
Raphael.js로 SVG 차트 만들기Raphael.js로 SVG 차트 만들기
Raphael.js로 SVG 차트 만들기
 
깃헙으로 코드리뷰 하기
깃헙으로 코드리뷰 하기깃헙으로 코드리뷰 하기
깃헙으로 코드리뷰 하기
 
Recurrence relation
Recurrence relationRecurrence relation
Recurrence relation
 

diff output formats

  • 2. diff $ diff foo bar • 두 파일을 라인 단위로 비교한다. • diff <원본 파일> <새 파일>
  • 3. diff Output Formats • diff의 대표적인 출력 포맷은 다음과 같다. – Normal Format – Context Format – Unified Format
  • 4. Normal Format $ diff foo bar • diff의 기본 출력 옵션으로, • 두 파일의 변경된 라인만 출력한다. • 변경된 부분을 명확하게 파악할 수 있지만, 변경된 라인 주변의 데이터 파악이 어렵다.
  • 5. 예제 텍스트 <원본 파일:foo> <새 파일:bar> 1 Hello, 1 Hello, 2 I am foo. 2 I am bar. 3 a 3 a 4 b 4 c 5 c 5 d 6 d 6 e 7 e 7 f 8 8 g 9
  • 6. Normal Format: 출력 예제 $ diff foo bar 2c2 < I am foo. --- > I am bar. 4d3 < b 7a7,8 > f > g
  • 7. Normal Format: 출력 형태 • 변경 상태를 나타내는 키워드 이후에, 원본 파일과 새 파일의 라인을 번갈아 출력한다. 변경 키워드 < 원본 파일 라인 < 원본 파일 라인... --- > 새 파일 라인 > 새 파일 라인...
  • 8. Normal Format: 변경 키워드 • 변경 키워드는 변경의 상태를 나타내는 것으로, 추가/삭제/변경을 의미하는 a,d,c가 있다. a : 추가(added) d : 삭제(deleted) c : 변경(changed)
  • 9. Normal Format: added 추가됨(added) 형태: (1)a[2] 예제: 7a7,8 의미: 원본 파일의 (1)라인 이후에, 새 파일의 범위 [2]만큼의 라인이 추가됨.
  • 10. Normal Format: changed 변경됨(changed) 형태: [1]c[2] 예제: 5,7c8,10 의미: 원본 파일의 범위 [1]만큼의 라인이, 새 파일의 범위 [2]만큼의 라인으로 변경됨.
  • 11. Normal Format: deleted 삭제됨(deleted) 형태: [1]d(2) 예제: 5,7d3 의미: 원본 파일의 범위 [1]만큼의 라인이 삭제됨. 새 파일의 (2)라인에 해당함.
  • 12. Normal Format: 출력 예제(상세) $ diff foo bar 2c2 # 원본 파일의 2라인이 새 파일의 2라인으로 변경됨 < I am foo. # 원본 파일 라인(삭제됨) --- > I am bar. # 새 파일 라인(추가됨) 4d3 # 원본 파일의 4라인이 삭제됨 < b 7a7,8 # 원본의 7라인에 새 파일의 7,8라인이 추가됨 > f > g
  • 13. Context Format $ diff -c foo bar • `-c` 옵션을 사용하며, 변경된 라인 전/후의 라인을 함께 출력한다. • 변경된 라인의 주변을 확인할 수 있기 때문에, 정확하게 어떤 것이 변경되었는지 파악할 수 있다. • 주로 소스코드를 배포할 때 사용한다. • `-C 라인수`, `--context[=라인수]` 옵션으로, 출력할 주변 라인의 개수를 설정할 수 있다. (기본 3개)
  • 14. 예제 텍스트 <원본 파일:foo> <새 파일:bar> 1 Hello, 1 Hello, 2 I am foo. 2 I am bar. 3 a 3 a 4 b 4 c 5 c 5 d 6 d 6 e 7 e 7 f 8 8 g 9
  • 15. Context Format: 출력 예제 $ diff -c foo bar (좌측에서 계속) *** foo 2013-01-29 --- 1,8 ---- --- bar 2013-01-29 Hello, *************** ! I am bar, *** 1,7 **** a Hello, c ! I am foo. d a e - b + f c + g d e
  • 16. Context Format: 출력 예제 $ diff -C 1 foo bar (좌측에서 계속) *** foo 2013-01-29 ! I am bar, --- bar 2013-01-29 a *************** c *** 1,5 **** *************** Hello, *** 7 **** ! I am foo, --- 6,8 ---- a e - b + f c + g --- 1,4 ---- Hello,
  • 17. Context Format: 출력 형태 • 각 파일의 이름과 수정시각을 나타내는 헤더 이후에, 각 파일에서 변경된 라인 부분을 출력한다. • 옵션으로 넘긴 라인수만큼(기본 3개), 변경된 라인의 전/후 라인도 함께 출력한다. *** 원본파일 수정시각 --- 새파일 수정시각 *************** *** 원본 파일 범위 **** [변경 키워드] 원본 파일 라인 --- 새 파일 범위 ---- [변경 키워드] 새 파일 라인
  • 18. Context Format: 변경 키워드 • 각 파일에서 변경된 라인은, 변경 키워드와 공백 이후에 출력된다. 변경되지 않은 라인은 2개의 공백 이후 출력한다. • 변경 키워드는 다음과 같다. ! : 변경됨 + : 새 파일에 추가됨 - : 원본 파일에서 삭제됨
  • 19. Context Format: 출력 예제(상세) $ diff -c foo bar *** foo 2013-01-29 # 원본 파일의 이름과 수정 시각 --- bar 2013-01-29 # 새 파일의 이름과 수정 시각 *************** *** 1,7 **** # 원본 파일의 1~7라인이 변경됨 Hello, ! I am foo. # 변경된 라인 a - b # 삭제된 라인 c # 변경된 라인 주변 3라인을 출력 (첫번째 라인) d # (두번째 라인) e # (세번째 라인)
  • 20. Context Format: 출력 예제(상세) (이전 페이지에서 계속) --- 1,8 ---- Hello, ! I am bar, # 변경된 라인 a c # 변경된 라인 전/후로 3라인이 여기까지 겹치므로, d # 모두 한 번에 출력된다. e + f # 추가된 라인 + g # 추가된 라인
  • 21. Context Format: 출력 예제(상세) $ diff -C 1 foo bar # 주변 라인 1개까지만 출력한다. *** foo 2013-01-29 --- bar 2013-01-29 *************** *** 1,5 **** Hello, ! I am foo, a - b c # 변경 라인 이후의 1개 라인만 출력됨 --- 1,4 ---- Hello,
  • 22. Context Format: 출력 예제(상세) (이전 페이지에서 계속) ! I am bar, a c *************** *** 7 **** # 주변 라인을 1개만 출력하면 변경 부분이 --- 6,8 ---- # 겹치지 않으므로, 분리해 출력한다. e # 마찬가지로, 변경 라인 전의 1라인만 출력됨 + f + g # 변경 라인이자 파일의 마지막이다
  • 23. Unified Format $ diff -u foo bar • `-u` 옵션을 사용하며, `-U 라인수`, `--unified[=라인수]` 옵션으로 주변 라인 개수를 설정할 수 있다. • Context Format과 비슷하지만, 변경된 부분의 주변 라인의 중복을 제거하고, 두 파일의 변화를 한 번에 볼 수 있어 간략하다.
  • 24. 예제 텍스트 <원본 파일:foo> <새 파일:bar> 1 Hello, 1 Hello, 2 I am foo. 2 I am bar. 3 a 3 a 4 b 4 c 5 c 5 d 6 d 6 e 7 e 7 f 8 8 g 9
  • 25. Unified Format: 출력 예제 $ diff -u foo bar (좌측에서 계속) --- foo 2013-01-29 +f +++ bar 2013-01-29 +g @@ -1,7 +1,8 @@ Hello, -I am foo. +I am bar. a -b c d e
  • 26. Unified Format: 출력 예제 $ diff -U 1 foo bar (좌측에서 계속) --- foo 2013-01-29 +f +++ bar 2013-01-29 +g @@ -1,5 +1,4 @@ Hello, -I am foo. +I am bar. a -b c @@ -7 +6,3 e
  • 27. Unified Format: 출력 형태 • 각 파일의 이름과 수정시각을 나타내는 헤더 이후에, 두 파일의 변경 부분을 함께 출력한다. • 변경 부분의 시작에는 각 파일의 변경 범위를 출력하고, 이후에 각 라인이 출력된다. --- 원본파일 수정시각 +++ 새파일 수정시각 @@ -원본파일범위 +새파일범위 @@ [변경 키워드]각 파일의 라인
  • 28. Unified Format: 변경 키워드 • 출력되는 각 라인은, 변경된 경우 변경 키워드로 시작하고, 변경되지 않은 경우 공백으로 시작한다. • 변경 키워드는 다음과 같다. + : 새 파일에 추가됨 - : 원본 파일에서 삭제됨
  • 29. Unified Format: 출력 예제(상세) $ diff -u foo bar --- foo 2013-01-29 +++ bar 2013-01-29 @@ -1,7 +1,8 @@ # 원본파일의 1,7라인이 Hello, # 새 파일의 1,8라인으로 변경됨 -I am foo. # 원본 파일에서 삭제되고, +I am bar. # 새 파일에 추가됨. a -b # 변경 키워드 이후에 바로 라인이 출력되고, c # 변경되지 않은 경우 공백 이후에 출력됨 d e
  • 30. Unified Format: 출력 예제(상세) (이전 페이지에서 계속) +f +g
  • 31. Unified Format: 출력 예제(상세) $ diff -U 1 foo bar # 주변 라인을 1라인만 출력함 --- foo 2013-01-29 +++ bar 2013-01-29 @@ -1,5 +1,4 @@ Hello, -I am foo. +I am bar. a -b c # 변경 라인 이후 1개 라인까지만 출력 @@ -7 +6,3 # 주변 라인의 개수가 1라인이므로, e # 변경 부분을 분리해서 출력함
  • 32. Unified Format: 출력 예제(상세) (이전 페이지에서 계속) +f +g
  • 33. 정리 • diff의 대표적인 출력 포맷은 다음과 같다. Normal Format: diff foo bar Context Format: diff -c foo bar Unified Format: diff -u foo bar
  • 34. 참고 • http://unixhelp.ed.ac.uk/CGI/man-cgi?diff • http://en.wikipedia.org/wiki/Diff • http://www.chemie.fu- berlin.de/chemnet/use/info/diff/diff_3.html#SEC10