diff는 각 줄을 이전, 새 또는 변경되지 않은 것으로 표시합니다.

diff는 각 줄을 이전, 새 또는 변경되지 않은 것으로 표시합니다.

출력 태그를 사용하여 정렬되지 않은 두 텍스트 파일을 구별해야 합니다.모든동작이 오래되었거나 새롭거나 변경되지 않았습니다. 이러한 태그는 줄의 시작이나 끝 부분에 나타나야 하며, 이 태그로 표시된 줄 외에는 출력이 없어야 합니다.

예를 들어 다음과 같은 두 개의 파일이 있다고 가정해 보겠습니다.

old.txt

unchanged line one
unchanged line two
unchanged line three
deleted line one
deleted line two
deleted line three
unchanged line four
unchanged line five
unchanged line six

new.txt

unchanged line one
unchanged line two
unchanged line three
unchanged line four
unchanged line five
inserted line one
inserted line two
inserted line three
unchanged line six

GNU diff를 사용하면 이전, 새 및 변경되지 않은 "입력 그룹"에 대한 인쇄 형식을 지정할 수 있지만 이러한 형식은 이전/새/변경되지 않은 줄의 첫 번째 줄에만 적용됩니다. 예를 들어 실행 diff --old-group-format='- %<' --new-group-format='+ %>' --unchanged-group-format='| %=' old.txt new.txt결과는 다음과 같습니다.

| unchanged line one
unchanged line two
unchanged line three
- deleted line one
deleted line two
deleted line three
| unchanged line four
unchanged line five
+ inserted line one
inserted line two
inserted line three
| unchanged line six

그러나 각 행에 태그가 지정되는 다음과 같은 차이점이 필요합니다.

| unchanged line one
| unchanged line two
| unchanged line three
- deleted line one
- deleted line two
- deleted line three
| unchanged line four
| unchanged line five
+ inserted line one
+ inserted line two
+ inserted line three
| unchanged line six

GNU diff를 단독으로 사용하거나 sed와 같은 다른 일반적인 명령줄 텍스트 처리 도구와 함께 사용하여 이를 수행할 수 있습니까? 너무 번거롭지 않다면 이식 가능한(POSIX) 솔루션이 더 나을 수도 있습니다.

답변1

GNU는 diff라인 형식과 그룹 형식을 지원합니다.

$ diff --old-line-format='- %L' --new-line-format='+ %L' --unchanged-line-format='| %L' old.txt new.txt
| unchanged line one
| unchanged line two
| unchanged line three
- deleted line one
- deleted line two
- deleted line three
| unchanged line four
| unchanged line five
+ inserted line one
+ inserted line two
+ inserted line three
| unchanged line six

관련 정보