diff3는
세 개의 파일을 비교해서 다른 점을 출력한다.
비교되는 세 개의 파일은
MINE,
OLDER,
그리고
YOURS이다.
세 파일 중 최대 한개는
`-'
가 될 수 있는데, 이것은
diff3에게
그 파일에 해당하는 내용을 표준 입력에서 읽어들이라는 뜻이다.
보통 diff3는 작업을 수행하기 위해 diff(1)를 호출한다.
하지만, DIFF 환경 변수를 수정해서 다른 프로그램을 사용할 수도 있다.
옵션
-3, --easy-only
중첩되지 않는 변화만 출력하라는 점을 제외하고는
-e와
비슷하다.
-a, --text
텍스트 파일이 아닌 것같이 보이더라도 모든 파일을
텍스트 파일로 취급하고, 이것들을 한줄 한줄씩 비교하게 한다.
-e, --ed
OLDER
를 기준으로
YOURS
와 다른 점을
MINE
에 적용시키기 위한
ed
스크립트를 만든다.
-i
System V 호환성을 위해
ed
스크립트 끝에 `w'와 `q' 명령을 추가한다.
이 옵션은 반드시
-AeExX3
옵션 중 하나와 함께 쓰여야 하며,
-m
옵션과는 함께 쓰일 수 없다.
-m, --merge
첫번째 파일에 edit 스크립트를 적용하고, 결과를 표준 출력으로 보낸다.
diff3에서 ed로 파이핑하는 것과는 달리,
이 작업은 이진 파일이나 종결되지 않은 줄에 대해서도 동작한다.
edit 스크립트 옵션이 지정되어 있지 않으면 -A 옵션으로 가정하고 수행한다.
-x, --overlap-only
-e
옵션과 비슷하지만, 중첩된 변화만을 출력한다.
-A, --show-all
OLDER
를 기준으로
YOURS
와의 차이점을
MINE
에 통합시킨다.
이때 모든 중첩된 변화는 괄호 줄로 묶어놓는다.
-E, --show-overlap
-e
옵션과 비슷하지만, 첫번째와 세번째 파일의
중첩된 차이점을 묶는 괄호 줄을 보여준다.
-e
옵션과 같이 사용했을 때, 중첩된 차이점은
아래와 같은 형식으로 나온다.
<<<<<<< MINE
lines from MINE
=======
lines from YOURS
>>>>>>> YOURS
-L LABEL, --label=LABEL
-A, -E, -X 옵션에서 사용되는
괄호 출력을 위해
LABEL
라벨을 사용한다.
이 옵션은 세개의 입력 파일에 대해 각각 한번씩 적용시켜야 한다.
기본 라벨은 입력 파일의 이름이다.
그래서
diff3 -L X -L Y -L Z -m A B C
명령은
diff3 -m A B C
명령과 같은 동작을 하지만, 출력에서 입력 파일의 이름이
A,
B,
C
대신
X,
Y,
Z로
붙게 된다.
-T, --initial-tab
일반 형식에서 각 줄 앞에 두개의 빈칸 대신 탭을 출력한다.
이것은 각 줄을 탭으로 정렬하기 위해 사용된다.
-X
-E와 비슷하지만, 중첩된 변화만을 출력한다.
다른 말로, -x와 비슷하지만,
-E 옵션에서처럼 차이점을 괄호로 묶는다.
--help
사용법을 표준 출력에 보여주고, 종료한다.
-v, --version
diff3의
버전 정보를 출력한다.
출력 형식
각각의 차이를 나타내는 텍스트 블럭은 `===='로 표시된 줄로 시작한다.
세 파일의 차이를 나타내는 블럭에서는 단순한 `====' 갖고,
두 파일의 차이를 나타내는 블럭에서는
`1', 2', `3'
중 한쪽에 그 차이가 나는 파일을 나타내기 위해 추가된다.
각 블럭에는 2개, 또는 3개의 입력행 세트가 포함되어
각각의 행 세트가 어느 파일에서 나온 것인지 나타내는
1개 또는 2개의 명령어가 앞에 나오게 된다.
기본 동작에서는 입력행 앞에 2개의 빈칸이 붙어
명령어와 구별할 수 있게 되어 있다.
`-T' 옵션이 설정되면, diff3는 빈칸 대신 탭을 사용하므로
입력에 있던 탭에 의한 자리수가 그대로 보존된다.
명령어 형식
FILE:La
이 블럭은 FILE의 L 행 다음에 나타나야 할 것으로,
그 파일에는 존재하지 않는다.
이 파일을 수정해 다른 파일과 같게 하려면, 다른 파일에서 블럭을 가져와 추가해야 한다.
예를 들어 `1:11a'은 이 블럭은 첫번째 파일의 11 행 다음에 나와야 할 것으로
첫번째 파일에는 포함되지 않은 것 말한다.
FILE:Rc
이 블럭에는 FILE의 행 범위 R이 포함되어 있다.
행 범위 R은 2 개의 행 번호를 쉼표로 단락지은 것이다.
숫자가 하나라면 한 줄 범위라고 해석된다.
이 파일을 편집해 다른 파일과 같게 하려면, 그 행 범위를 다른 파일로부터 가져와 변경해야 한다.
예를 들어, `2:11,13c'은 이 블럭이 두번째 파일의 11-13 행의 내용을 포함한다는 의미이다.
입력행 묶음의 마지막 행이 개행으로 끝나지 않은 경우는
출력의 다음 행이 `\'로 시작되므로
개행으로 끝나는 경우와 구별할 수 있다.