SlideShare a Scribd company logo
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

PPTX
Part14 %ed%8 c%8c%ec%9d%bc%ec%9e%85%ec%b6%9c%eb%a0%a5
PDF
[강릉원주대 대기환경과학과] 대기과학전산입문 설명서
PDF
12장 함수 조합 다시 보기4
PDF
카카오스토리 웹팀의 코드리뷰 경험
PDF
[123] quality without qa
PDF
버전관리시스템 종류와 소개
PDF
linux1
PPTX
Part14 %ed%8 c%8c%ec%9d%bc%ec%9e%85%ec%b6%9c%eb%a0%a5
[강릉원주대 대기환경과학과] 대기과학전산입문 설명서
12장 함수 조합 다시 보기4
카카오스토리 웹팀의 코드리뷰 경험
[123] quality without qa
버전관리시스템 종류와 소개
linux1

Similar to diff output formats (20)

PDF
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
PDF
Git - Level 2
PPT
Git from google techtalks by Randal
PDF
Introduction to Linux #1
PDF
Git 과 GitHub 를 이용한 버전관리와 협업 - 2주차A - 비교하기와 되돌리기
PDF
Git 코드랩 스터디 2
PDF
[NEXT 프연 Week2] UNIX 명령어 간단하게 살펴보기
PDF
Perl Script Document
PDF
제로부터시작하는Git
PDF
Git을 조금 더 알아보자!
PDF
Linux tutorial
PDF
OSS SW Basics Lecture 08: Software Configuration Management (2)
PDF
Git CLI 기초 - 리눅스 명령어, 커밋, 로그, 상태, 스테이지, 설정, 푸쉬, 풀
PDF
About git
PPTX
PDF
Perl Script
PDF
Add 에 대해서 알아보자. 의미 있는 변경 이력과 Patch - 2022년 3월 31일 Git 세미나
PDF
[NDC16] Effective Git
PDF
정규표현식 Regular expression (regex)
PDF
[부스트캠프 Tech talk] 최영근 80x24 크기의 세계로
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
Git - Level 2
Git from google techtalks by Randal
Introduction to Linux #1
Git 과 GitHub 를 이용한 버전관리와 협업 - 2주차A - 비교하기와 되돌리기
Git 코드랩 스터디 2
[NEXT 프연 Week2] UNIX 명령어 간단하게 살펴보기
Perl Script Document
제로부터시작하는Git
Git을 조금 더 알아보자!
Linux tutorial
OSS SW Basics Lecture 08: Software Configuration Management (2)
Git CLI 기초 - 리눅스 명령어, 커밋, 로그, 상태, 스테이지, 설정, 푸쉬, 풀
About git
Perl Script
Add 에 대해서 알아보자. 의미 있는 변경 이력과 Patch - 2022년 3월 31일 Git 세미나
[NDC16] Effective Git
정규표현식 Regular expression (regex)
[부스트캠프 Tech talk] 최영근 80x24 크기의 세계로
Ad

More from Ohgyun Ahn (17)

PDF
호갱노노 이렇게 만듭니다
PDF
ES6: RegExp.prototype.unicode 이해하기
PDF
Node.js 시작하기
PDF
JavaScript Memory Profiling
PDF
JavaScript Minification
PDF
JavaSript Template Engine
PDF
Github Usage Scenarios
PDF
Javascript hoisting
PDF
패키지 매니저의 요건
PDF
BASH Guide Summary
PDF
Python Usage (5-minute-summary)
PDF
UX 심포지엄 20120 키노트 정리
PDF
크롬익스텐션 맛보기
PDF
재미있는 생산성 향상 도구
PDF
Raphael.js로 SVG 차트 만들기
PDF
깃헙으로 코드리뷰 하기
PDF
Recurrence relation
호갱노노 이렇게 만듭니다
ES6: RegExp.prototype.unicode 이해하기
Node.js 시작하기
JavaScript Memory Profiling
JavaScript Minification
JavaSript Template Engine
Github Usage Scenarios
Javascript hoisting
패키지 매니저의 요건
BASH Guide Summary
Python Usage (5-minute-summary)
UX 심포지엄 20120 키노트 정리
크롬익스텐션 맛보기
재미있는 생산성 향상 도구
Raphael.js로 SVG 차트 만들기
깃헙으로 코드리뷰 하기
Recurrence relation
Ad

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