리눅스 터미널에서 두 개의 텍스트 파일을 비교하는 방법

0
780
Linux에서 터미널 창의 그림
Fatmawati Achmad Zaenuri / Shutterstock.com

텍스트 파일의 두 개정판의 차이점을 확인해야합니까? 그때 diff 필요한 명령입니다. 이 튜토리얼은 사용 방법을 보여줍니다 diff Linux 및 macOS에서는 쉬운 방법입니다.

diff로 다이빙

그만큼 diff 명령은 두 파일을 비교하고 두 파일의 차이점 목록을 생성합니다. 보다 정확하게하기 위해 두 번째 파일과 일치시키기 위해 첫 번째 파일에서 변경해야 할 변경 목록을 생성합니다. 이 점을 명심하면 결과를 이해하는 것이 더 쉽다는 것을 알게 될 것입니다 diff. 그만큼 diff 명령은 소스 코드 파일 간의 차이점을 찾고 패치 명령과 같은 다른 프로그램에서 읽고 실행할 수있는 출력을 생성하도록 설계되었습니다. 이 자습서에서는 가장 유용한 인간 친화적 인 사용 방법을 살펴 보겠습니다. diff.

바로 들어가서 두 파일을 분석해 봅시다. 명령 행의 파일 순서에 따라 파일이 결정됩니다 diff '첫 번째 파일'로 간주되며 '두 번째 파일'로 간주됩니다. 아래 예에서 alpha1은 첫 번째 파일이고 alpha2는 두 번째 파일입니다. 두 파일 모두 발음 알파벳을 포함하지만 두 번째 파일 인 alpha2는 두 파일이 동일하지 않도록 약간 더 편집했습니다.

파일을이 명령과 비교할 수 있습니다. 유형 diff, 공백, 첫 번째 파일 이름, 공백, 두 번째 파일 이름을 입력 한 다음 Enter 키를 누릅니다.

diff alpha1 alpha2

옵션없이 diff 명령의 출력

우리는 그 결과를 어떻게 분석합니까? 무엇을 찾아야하는지 알면 그렇게 나쁘지 않습니다. 각 차이는 차례로 단일 열에 나열되며 각 차이에 레이블이 지정됩니다. 라벨에는 글자의 양쪽에 숫자가 들어 있습니다. 4c4. 첫 번째 숫자는 alpha1의 줄 번호이고 두 번째 숫자는 alpha2의 줄 번호입니다. 중간에있는 편지는 다음과 같습니다.

  • : 첫 번째 파일의 행을 두 번째 파일의 행과 일치하도록 변경해야합니다.
  • : 두 번째 파일과 일치하도록 첫 번째 파일의 행을 삭제해야합니다.
  • : 두 번째 파일과 일치하도록 첫 번째 파일에 추가 컨텐츠를 추가해야합니다.

그만큼 4c4 이 예에서는 alpha1의 4 행이 alpha2의 4 행과 일치하도록 변경되어야한다고 알려줍니다. 이것이 두 파일의 첫 번째 차이점입니다. diff 녹이다.

로 시작하는 줄 < 첫 번째 파일 (예 : alpha1)과 > 두 번째 파일 인 alpha2를 참조하십시오. 라인 < Delta Delta라는 단어는 alpha1의 4 행 내용입니다. 라인 > Dave Dave라는 단어는 alpha2의 4 행 내용입니다. 요약하면, alpha1의 4 행에서 Delta를 Dave로 바꿔 두 파일에서 해당 행을 일치시켜야합니다.

다음 변경 사항은 12c12. 동일한 논리를 적용하면 alpha1의 12 행에 Lima라는 단어가 포함되어 있지만 alpha2의 12 행에는 Linux라는 단어가 포함되어 있습니다.

세 번째 변경은 α2에서 삭제 된 줄을 나타냅니다. 라벨 21d20 "두 번째 파일이 20 번째 줄부터 동기화되도록하려면 첫 번째 파일에서 21 번째 줄을 삭제해야합니다." 그만큼 < Uniform line은 alpha1에서 삭제해야하는 행의 내용을 보여줍니다.

네 번째 차이점은 26a26,28. 이 변경은 alpha2에 추가 된 3 개의 추가 행을 나타냅니다. 참고 26,28 라벨에. 쉼표로 구분 된 두 줄 번호는 줄 번호 범위를 나타냅니다. 이 예에서 범위는 26 행에서 28 행까지입니다. 레이블은 "첫 번째 파일의 26 행에서 두 번째 파일의 26 행에서 28 행을 추가합니다"로 해석됩니다. alpha1에 추가해야하는 alpha2의 세 줄이 표시됩니다. 여기에는 Quirk, Strange 및 Charm이라는 단어가 포함됩니다.

Snappy One Liners

두 파일이 동일한 지 여부 만 알고 싶다면 -s (동일한 파일보고) 옵션.

diff -s alpha1 alpha3

-s 옵션과 함께 diff 명령의 출력

당신은 사용할 수 있습니다 -q (간략한) 옵션은 두 파일이 다른 것에 대해 똑같은 간결한 진술을 얻습니다.

diff -q alpha1 alpha2

-q 옵션을 사용하여 diff 명령의 출력

주의해야 할 것은 두 개의 동일한 파일을 사용하여-q (간략) 옵션이 완전히 닫히고 아무 것도보고하지 않습니다.

대체 견해

그만큼 -y (나란히) 옵션은 다른 레이아웃을 사용하여 파일 차이점을 설명합니다. 종종 사용하는 것이 편리합니다 -W (가로) 옵션을 나란히 표시하여 표시되는 열 수를 제한합니다. 이렇게하면 출력을 읽기 어렵게하는 줄 바꿈 줄이 생기지 않습니다. 여기에 우리는 말했다 diff 병렬 디스플레이를 생성하고 출력을 70 열로 제한합니다.

diff -y -W 70 alpha1 alpha2

나란히 표시되는 diff 명령의 출력

명령 행의 첫 번째 파일 인 alpha1이 왼쪽에 표시되고 명령 행의 두 번째 행인 alpha2가 오른쪽에 표시됩니다. 각 파일의 줄이 나란히 표시됩니다. alpha2의 해당 행 옆에는 변경, 삭제 또는 추가 된 표시기 문자가 있습니다.

  • |: 두 번째 파일에서 변경된 행입니다.
  • <: 두 번째 파일에서 삭제 된 행입니다.
  • >: 첫 번째 파일에없는 두 번째 파일에 추가 된 행입니다.

파일 차이에 대해보다 간결한 요약을 원한다면 --suppress-common-lines 선택권. 이 힘 diff 변경, 추가 또는 삭제 된 행만 나열합니다.

diff -y -W 70 --suppress-common-lines alpha1 alpha2

--suppress-common-lines 옵션을 사용하여 diff 명령의 출력

컬러 스플래쉬 추가

또 다른 유틸리티는 colordiff 색상 강조 표시를 diff 산출. 이렇게하면 차이점이있는 행을 훨씬 쉽게 확인할 수 있습니다.

사용하다 apt-get Ubuntu 또는 다른 데비안 기반 배포판을 사용하는 경우이 패키지를 시스템에 설치하십시오. 다른 Linux 배포판에서는 Linux 배포판의 패키지 관리 도구를 대신 사용하십시오.

sudo apt-get install colordiff

사용하다 colordiff 당신이 사용하는 것처럼 diff.

옵션이없는 colordiff 명령의 출력

사실로, colordiff 래퍼입니다 diff, diff 무대 뒤에서 모든 작업을 수행합니다. 그 때문에 diff 옵션은 함께 작동합니다 colordiff.

--suppress-common-lines 옵션을 사용하여 colordiff 명령의 출력

어떤 맥락을 제공함

화면에 표시된 파일의 모든 줄과 변경된 줄만 표시하는 중간 지점을 찾으려면 다음을 요청할 수 있습니다. diff 컨텍스트를 제공합니다. 이를 수행하는 두 가지 방법이 있습니다. 두 가지 방법 모두 동일한 목적을 달성합니다. 즉, 변경된 각 줄 전후에 일부 줄을 표시합니다. 차이가 감지 된 위치에서 파일에서 진행중인 작업을 확인할 수 있습니다.

첫 번째 방법은 -c (복사 된 컨텍스트) 옵션.

colordiff -c alpha1 alpha2

-c 옵션을 사용한 colordiff 출력

그만큼 diff output에는 헤더가 있습니다. 헤더에는 두 파일 이름과 수정 시간이 나열됩니다. 별표가 있습니다 (*) 첫 번째 파일 이름 앞에 대시 (-)를 두 번째 파일 이름 앞에 추가하십시오. 별표와 대시는 출력의 행이 속하는 파일을 나타내는 데 사용됩니다.

중간에 1,7의 별표가 있으면 알파 1의 선을보고 있음을 나타냅니다. 정확히 말하면 1 ~ 7 행을 봅니다. 델타라는 단어가 변경된 것으로 표시됩니다. 느낌표가 있습니다 ( ! )와 함께 빨간색이며 빨간색입니다. 해당 줄 전후에 변경되지 않은 텍스트의 세 줄이 표시되므로 파일에서 해당 줄의 컨텍스트를 볼 수 있습니다.

가운데에 1,7이있는 대시 선은 이제 alpha2의 선을보고 있음을 나타냅니다. 다시, 우리는 1 줄에서 7 줄을보고 있는데, 4 줄에있는 Dave라는 단어가 다른 것으로 표시되었습니다.

각 변경 위와 아래에 세 줄의 컨텍스트가 기본값입니다. 원하는 줄 수를 지정할 수 있습니다 diff 제공합니다. 이렇게하려면 -C (복사 된 문맥) 옵션을 대문자 'C'로 표시하고 원하는 줄 수를 제공합니다.

colordiff -C 2 alpha1 alpha2

-C 2 옵션을 사용한 색상 차이 출력

두번째 diff 컨텍스트를 제공하는 옵션은 -u (통합 컨텍스트) 옵션.

colordiff -u alpha1 alpha2

-u 옵션을 사용한 colordiff 출력

이전과 마찬가지로 출력에 헤더가 있습니다. 두 파일의 이름이 지정되고 수정 시간이 표시됩니다. 대시가 있습니다 (-) 앞에 alpha1과 더하기 기호 (+)를 alpha2 이름 앞에 추가하십시오. 이것은 대시를 사용하여 alpha1을 나타내며 더하기 부호를 사용하여 alpha2를 나타냅니다. 목록 전체에 흩어져있는 기호는 기호로 시작합니다 (@). 이 줄은 각 차이의 시작을 나타냅니다. 또한 각 파일에서 어떤 행이 표시되는지 알려줍니다.

변경된 라인의 컨텍스트를 볼 수 있도록 라인 전후에 3 개의 라인이 다른 것으로 플래그가 표시됩니다. 통합보기에서 차이가있는 선이 서로 위에 표시됩니다. alpha1의 줄 앞에는 대시가 있고 alpha2의 줄 앞에는 더하기 부호가옵니다. 이 디스플레이는 위의 복사 된 컨텍스트 디스플레이가 15 번 수행 한 것을 8 줄로 달성합니다.

당신이 예상대로, 우리는 요청할 수 있습니다 diff 우리가보고 싶은 통일 된 문맥의 수를 정확하게 제공하기 위해. 이렇게하려면 -U (통합 컨텍스트) 옵션을 대문자 'U'로 표시하고 원하는 줄 수를 제공하십시오.

colordiff -U 2 alpha1 alpha2

-U 2 옵션을 사용한 색상 차이 출력

공백과 사례 무시

test4와 test5의 다른 두 파일을 분석해 봅시다. 여기에는 6 명의 슈퍼 히어로 이름이 있습니다.

colordiff -y -W 70 test4 test5

test4 및 test5 파일에서 colordiff 출력

결과는 diff Black Widow, Spider-Man 및 Thor 라인과 다른 점은 없습니다. 캡틴 아메리카, 아이언 맨, 헐크 라인의 변경 사항을 표시합니다.

그래서 무엇이 다른가요? test5에서 헐크는 소문자 "h"로 표시되며 Captain America는 "Captain"과 "America"사이에 여분의 공간이 있습니다. 알았어, 알겠지만, Ironman 라인에 어떤 문제가 있습니까? 눈에 띄는 차이는 없습니다. 다음은 좋은 경험 규칙입니다. 보이지 않으면 대답은 공백입니다. 그 줄의 끝에 거의 확실하게 길잃은 공간이나 2 개 또는 탭 문자가 있습니다.

그들이 당신에게 중요하지 않은 경우, 당신은 지시 할 수 있습니다 diff 다음을 포함하여 특정 유형의 선 차이를 무시합니다.

  • -나는: 경우에 따라 차이를 무시하십시오.
  • -지: 후행 공백을 무시합니다.
  • -비: 공백 양의 변화를 무시합니다.
  • -w: 모든 공백 변경을 무시하십시오.

diff에게이 두 파일을 다시 확인하도록 요청하지만 이번에는 차이점을 무시하도록하겠습니다.

colordiff -i -y -W 70 test4 test5

colordiff의 출력은 대소 문자를 무시합니다.

"헐크"및 "헐크"가있는 줄은 이제 일치하는 것으로 간주되며 소문자 "h"에 대한 플래그는 차이가 없습니다. 물어 보자 diff 후행 공백을 무시합니다.

colordiff -i -Z -y -W 70 test4 test5

colordiff의 출력은 후행 공백을 무시합니다.

의심되는 바와 같이, 후행 공백은 Ironman 라인의 차이 였을 것입니다. diff 더 이상 해당 라인의 차이를 표시하지 않습니다. 캡틴 아메리카를 떠납니다. 물어 보자 diff 대소 문자를 무시하고 무시 모두 공백 문제.

colordiff -i -w -y -W 70 test4 test5

colordiff의 출력은 모든 공백을 무시합니다.

말함으로써 diff 걱정하지 않는 차이점을 무시하고 diff 우리의 목적 상 파일이 일치한다고 알려줍니다.

그만큼 diff command에는 더 많은 옵션이 있지만 대부분은 기계가 읽을 수있는 출력을 생성하는 것과 관련이 있습니다. Linux 매뉴얼 페이지에서 검토 할 수 있습니다. 위의 예에서 사용한 옵션을 사용하면 명령 줄과 사람의 눈알을 사용하여 텍스트 파일 버전 간의 모든 차이점을 추적 할 수 있습니다.