34
diff Output Formats 안오균

diff output formats

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: diff output formats

diff Output Formats

안오균

Page 2: diff output formats

diff

$ diff foo bar

• 두 파일을 라인 단위로 비교한다.

• diff <원본 파일> <새 파일>

Page 3: diff output formats

diff Output Formats

• diff의 대표적인 출력 포맷은 다음과 같다.

– Normal Format

– Context Format

– Unified Format

Page 4: diff output formats

Normal Format

$ diff foo bar

• diff의 기본 출력 옵션으로,

• 두 파일의 변경된 라인만 출력한다.

• 변경된 부분을 명확하게 파악할 수 있지만,

변경된 라인 주변의 데이터 파악이 어렵다.

Page 5: diff output formats

예제 텍스트

<원본 파일:foo>

1 Hello,

2 I am foo.

3 a

4 b

5 c

6 d

7 e

8

<새 파일:bar>

1 Hello,

2 I am bar.

3 a

4 c

5 d

6 e

7 f

8 g

9

Page 6: diff output formats

Normal Format: 출력 예제

$ diff foo bar

2c2

< I am foo.

---

> I am bar.

4d3

< b

7a7,8

> f

> g

Page 7: diff output formats

Normal Format: 출력 형태

• 변경 상태를 나타내는 키워드 이후에,

원본 파일과 새 파일의 라인을 번갈아 출력한다.

변경 키워드

< 원본 파일 라인

< 원본 파일 라인...

---

> 새 파일 라인

> 새 파일 라인...

Page 8: diff output formats

Normal Format: 변경 키워드

• 변경 키워드는 변경의 상태를 나타내는 것으로,

추가/삭제/변경을 의미하는 a,d,c가 있다.

a : 추가(added)

d : 삭제(deleted)

c : 변경(changed)

Page 9: diff output formats

Normal Format: added

추가됨(added)

형태: (1)a[2]

예제: 7a7,8

의미:

원본 파일의 (1)라인 이후에,

새 파일의 범위 [2]만큼의 라인이 추가됨.

Page 10: diff output formats

Normal Format: changed

변경됨(changed)

형태: [1]c[2]

예제: 5,7c8,10

의미:

원본 파일의 범위 [1]만큼의 라인이,

새 파일의 범위 [2]만큼의 라인으로 변경됨.

Page 11: diff output formats

Normal Format: deleted

삭제됨(deleted)

형태: [1]d(2)

예제: 5,7d3

의미:

원본 파일의 범위 [1]만큼의 라인이 삭제됨.

새 파일의 (2)라인에 해당함.

Page 12: diff output formats

Normal Format: 출력 예제(상세)

$ diff foo bar

2c2 # 원본 파일의 2라인이 새 파일의 2라인으로 변경됨

< I am foo. # 원본 파일 라인(삭제됨)

---

> I am bar. # 새 파일 라인(추가됨)

4d3 # 원본 파일의 4라인이 삭제됨

< b

7a7,8 # 원본의 7라인에 새 파일의 7,8라인이 추가됨

> f

> g

Page 13: diff output formats

Context Format

$ diff -c foo bar

• `-c` 옵션을 사용하며,

변경된 라인 전/후의 라인을 함께 출력한다.

• 변경된 라인의 주변을 확인할 수 있기 때문에,

정확하게 어떤 것이 변경되었는지 파악할 수 있다.

• 주로 소스코드를 배포할 때 사용한다.

• `-C 라인수`, `--context[=라인수]` 옵션으로,

출력할 주변 라인의 개수를 설정할 수 있다.

(기본 3개)

Page 14: diff output formats

예제 텍스트

<원본 파일:foo>

1 Hello,

2 I am foo.

3 a

4 b

5 c

6 d

7 e

8

<새 파일:bar>

1 Hello,

2 I am bar.

3 a

4 c

5 d

6 e

7 f

8 g

9

Page 15: diff output formats

Context Format: 출력 예제

$ diff -c foo bar

*** foo 2013-01-29

--- bar 2013-01-29

***************

*** 1,7 ****

Hello,

! I am foo.

a

- b

c

d

e

(좌측에서 계속)

--- 1,8 ----

Hello,

! I am bar,

a

c

d

e

+ f

+ g

Page 16: diff output formats

Context Format: 출력 예제

$ diff -C 1 foo bar

*** foo 2013-01-29

--- bar 2013-01-29

***************

*** 1,5 ****

Hello,

! I am foo,

a

- b

c

--- 1,4 ----

Hello,

(좌측에서 계속)

! I am bar,

a

c

***************

*** 7 ****

--- 6,8 ----

e

+ f

+ g

Page 17: diff output formats

Context Format: 출력 형태

• 각 파일의 이름과 수정시각을 나타내는 헤더 이후에,

각 파일에서 변경된 라인 부분을 출력한다.

• 옵션으로 넘긴 라인수만큼(기본 3개),

변경된 라인의 전/후 라인도 함께 출력한다.

*** 원본파일 수정시각

--- 새파일 수정시각

***************

*** 원본 파일 범위 ****

[변경 키워드] 원본 파일 라인

--- 새 파일 범위 ----

[변경 키워드] 새 파일 라인

Page 18: diff output formats

Context Format: 변경 키워드

• 각 파일에서 변경된 라인은,

변경 키워드와 공백 이후에 출력된다.

변경되지 않은 라인은 2개의 공백 이후 출력한다.

• 변경 키워드는 다음과 같다.

! : 변경됨

+ : 새 파일에 추가됨

- : 원본 파일에서 삭제됨

Page 19: diff output formats

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 # (세번째 라인)

Page 20: diff output formats

Context Format: 출력 예제(상세)

(이전 페이지에서 계속)

--- 1,8 ----

Hello,

! I am bar, # 변경된 라인

a

c # 변경된 라인 전/후로 3라인이 여기까지 겹치므로,

d # 모두 한 번에 출력된다.

e

+ f # 추가된 라인

+ g # 추가된 라인

Page 21: diff output formats

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,

Page 22: diff output formats

Context Format: 출력 예제(상세)

(이전 페이지에서 계속)

! I am bar,

a

c

***************

*** 7 **** # 주변 라인을 1개만 출력하면 변경 부분이

--- 6,8 ---- # 겹치지 않으므로, 분리해 출력한다.

e # 마찬가지로, 변경 라인 전의 1라인만 출력됨

+ f

+ g # 변경 라인이자 파일의 마지막이다

Page 23: diff output formats

Unified Format

$ diff -u foo bar

• `-u` 옵션을 사용하며,

`-U 라인수`, `--unified[=라인수]` 옵션으로

주변 라인 개수를 설정할 수 있다.

• Context Format과 비슷하지만,

변경된 부분의 주변 라인의 중복을 제거하고,

두 파일의 변화를 한 번에 볼 수 있어 간략하다.

Page 24: diff output formats

예제 텍스트

<원본 파일:foo>

1 Hello,

2 I am foo.

3 a

4 b

5 c

6 d

7 e

8

<새 파일:bar>

1 Hello,

2 I am bar.

3 a

4 c

5 d

6 e

7 f

8 g

9

Page 25: diff output formats

Unified Format: 출력 예제

$ diff -u foo bar

--- foo 2013-01-29

+++ bar 2013-01-29

@@ -1,7 +1,8 @@

Hello,

-I am foo.

+I am bar.

a

-b

c

d

e

(좌측에서 계속)

+f

+g

Page 26: diff output formats

Unified Format: 출력 예제

$ diff -U 1 foo bar

--- foo 2013-01-29

+++ bar 2013-01-29

@@ -1,5 +1,4 @@

Hello,

-I am foo.

+I am bar.

a

-b

c

@@ -7 +6,3

e

(좌측에서 계속)

+f

+g

Page 27: diff output formats

Unified Format: 출력 형태

• 각 파일의 이름과 수정시각을 나타내는 헤더 이후에,

두 파일의 변경 부분을 함께 출력한다.

• 변경 부분의 시작에는 각 파일의 변경 범위를 출력하고,

이후에 각 라인이 출력된다.

--- 원본파일 수정시각

+++ 새파일 수정시각

@@ -원본파일범위 +새파일범위 @@

[변경 키워드]각 파일의 라인

Page 28: diff output formats

Unified Format: 변경 키워드

• 출력되는 각 라인은,

변경된 경우 변경 키워드로 시작하고,

변경되지 않은 경우 공백으로 시작한다.

• 변경 키워드는 다음과 같다.

+ : 새 파일에 추가됨

- : 원본 파일에서 삭제됨

Page 29: diff output formats

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

Page 30: diff output formats

Unified Format: 출력 예제(상세)

(이전 페이지에서 계속)

+f

+g

Page 31: diff output formats

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 # 변경 부분을 분리해서 출력함

Page 32: diff output formats

Unified Format: 출력 예제(상세)

(이전 페이지에서 계속)

+f

+g

Page 33: diff output formats

정리

• diff의 대표적인 출력 포맷은 다음과 같다.

Normal Format: diff foo bar

Context Format: diff -c foo bar

Unified Format: diff -u foo bar

Page 34: diff output formats

참고

• 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