diff 출력의 느낌표는 무엇을 의미합니까?

diff 출력의 느낌표는 무엇을 의미합니까?

학교 과제가 있어요. 이 작업의 일부는 파일의 변경 사항을 확인하고 해당 변경 사항을 로그 파일에 기록하는 것입니다. 지금까지 diff도움이 될 것이라고 생각되는 명령을 찾았습니다 . 다음 내용을 포함하는 두 개의 파일이 있다고 가정해 보겠습니다.

파일 1

orange
apple

파일 2

orange
apple
strawberry

이 경우에 사용하면 diff -c file1 file2명령의 출력은 다음과 같습니다.

*** file1   2016-11-24 08:31:19.424712242 +0100
--- file2   2016-11-24 08:25:24.604681751 +0100
***************
*** 1,2 ****
--- 1,3 ----
  orange
  apple
+ strawberry

제 생각에는 "+" 기호가 있는 줄을 file1에 추가해야 동일(?)하게 만들 수 있을 것 같습니다.

이제 file1을 다음과 같이 변경한다고 가정해 보겠습니다.

orange
apple
peach

출력은 diff -c file1 file2다음과 같습니다

*** file1   2016-11-24 08:34:50.647128312 +0100
--- file2   2016-11-24 08:25:24.604681751 +0100
***************
*** 1,3 ****
  orange
  apple
! peach
--- 1,3 ----
  orange
  apple
! strawberry

이 느낌표가 무엇을 의미하는지 이해하지 못해서 여기서 길을 잃었습니다. 갑자기 diff 명령이 그다지 유용해 보이지 않습니다. diff 명령에 대한 매뉴얼 페이지를 보려고 했지만 아무것도 찾을 수 없었습니다(아마도 제가 보지 못했을 수도 있습니다).

답변1

  • diff -u

당신의 임무에 필요한 것일 수도 있습니다.

예를 들어 다음을 사용하십시오 diff -u.

michael@x071:[/home/michael]diff -u file?
--- file1       2016-11-24 07:48:41 +0000
+++ file2       2016-11-24 07:48:57 +0000
@@ -1,3 +1,3 @@
 orange
 apple
-peach
+strawberry

한 가지 조언 - RTM - 또는 - 설명서를 읽어보세요. 일반적으로 다른 옵션이 있습니다. 참고: diff(및 세 개의 파일을 비교할 때 diff3)의 기록 옵션은 file1을 file2로 변경하는(또는 file2를 다시 file1로 변경하는) "프로그램 inout"을 만드는 데 도움이 되는 것입니다. 이것이 모든 "버전 관리" 소프트웨어의 기본입니다.

오래 전에 기억했던 차이점 옵션:

  • -e: File1을 File2로 변환하기 위해 ed 편집기에서 사용하기에 적합한 형식으로 출력을 생성합니다.
  • -f: ed 편집기에서 사용하기에 적합하지 않은 형식으로 출력을 생성하며, -e이 플래그에서 생성된 것과 반대 순서로 File1을 File2로 변환하는 데 필요한 수정 사항을 보여줍니다.
  • -n: flags와 유사한 출력을 생성 -e하지만 역순으로 각 삽입 또는 삭제 명령에서 변경된 행 수를 표시합니다. 이는 버전 관리 시스템(RCS)에서 사용되는 형식입니다.

제가 강조하고 싶은 마지막 옵션은 비교적 말하자면 "새로운" 옵션입니다. (또한 몇 년이 지났지만 일반적으로 POSIX 구현에서는 그렇지 않습니다). "RCS"의 "ed"에 맞는 출력을 생성하는 대신 다음이 적합합니다 patch.

  • -u: 3줄 통합 컨텍스트를 사용하여 diff 명령 비교를 생성합니다. 출력은 -c컨텍스트 행이 반복되지 않고 대신 컨텍스트, 삭제된 행 및 추가된 행이 인터리브되어 표시된다는 점을 제외하면 flags 와 유사합니다.

IMHO: 두 파일이 다른지 여부보다 더 많은 것을 알고 싶을 때 키 값은 diff -c명령보다 개선되었습니다 . cmp나는 그것을 본 적이 없습니다(아마도 이것은 "새로운" 옵션일 수도 있습니다). 그러나 내 문제는 두 디렉터리 트리 간에 다른 파일을 재귀적으로 검색하는 것이므로 고려해야 합니다.

답변2

귀하의 질문에 대한 답변은 diff 정보 파일 노드에 있습니다 Detailed Context.

서로 다른 줄을 둘러싸는 컨텍스트 줄은 두 개의 공백 문자로 시작됩니다. 두 파일 간에 차이가 있는 줄은 다음 표시기 중 하나로 시작하고 그 뒤에 공백 문자가 옵니다.

  • !

    그룹의 일부인 줄 또는 두 파일 간에 변경된 여러 줄. !다른 파일의 해당 섹션에는 이라는 레이블이 붙은 해당 행 세트가 있습니다.

  • +

    두 번째 파일에 "삽입된" 줄은 첫 번째 파일의 어떤 것과도 일치하지 않습니다.

  • -

    첫 번째 파일의 "삭제된" 줄은 두 번째 파일의 어떤 항목과도 ​​일치하지 않습니다.

정보 파일에는 헤더 라인을 포함하여 출력 형식에 대한 광범위한 정보가 포함되어 있습니다. 다시 읽어보시길 권합니다.

답변3

의 출력은 diff청크로 구성되며, 각 청크는 일련의 변경 사항에 해당합니다. 이 ***************줄은 해당 블록의 시작을 표시합니다.

각 청크는 파일 내의 컨텍스트를 제공합니다. *** 1,3 ****은 다음 내용이 첫 번째 파일의 1~3번째 줄이고, --- 1,3 ----다음 내용이 두 번째 파일의 1~3번째 줄이라는 의미입니다.

첫 번째 열의 빼기 기호는 -삭제된 행을 나타내고 더하기 기호는 +추가된 행을 나타냅니다. 느낌표는 !변경된 행을 표시합니다.

귀하의 경우 첫 번째 파일이 두 번째 파일 peach로 변경되었습니다 .strawberry

관련 정보