쉘 스크립트를 사용하여 Linux에서 "diff" 명령을 사용하여 문자 레벨 차이를 얻는 방법은 무엇입니까?

쉘 스크립트를 사용하여 Linux에서 "diff" 명령을 사용하여 문자 레벨 차이를 얻는 방법은 무엇입니까?

두 개의 SQL 파일이 있는데 그 중 하나 old.sqlnew.sql.

old.sqlEmp_Id, Name 및 Address라는 세 개의 필드가 있는 테이블이 있고 데이터가 다음과 같이 old.sql에 저장되어 있다고 가정합니다 .

Insert into table1 values (101 ,"a", "xyz");
Insert into table1 values (102 ,"b", "pqr");

그런 다음 "a" 주소 "xyz"를 "xyz123"으로 변경하고 해당 데이터를 파일에 저장했습니다 new.sql. 이제 파일에는 new.sql다음 데이터가 포함됩니다.

Insert into table1 values (101 ,"a", "xyz123");
Insert into table1 values (102 ,"b", "pqr");

diff다음과 같은 명령을 사용할 때 :

diff old.sql new.sql

행별로 차이가 있지만 업데이트된 데이터(예: xyz123)만 원합니다.

답변1

의 짧은 답변여기:

git diff --word-diff=color --word-diff-regex=. file1 file2

그리고여기:

diff -u file1 file2 |perl /usr/share/doc/git/contrib/diff-highlight/diff-highlight

답변2

당신은 찾을 수 있습니다wdiff이러한 유형의 비교에 유용합니다. 축어적 비교를 생성하는 프런트 엔드입니다 diff. 귀하의 예를 바탕으로 기본적으로 생성됩니다.

Insert into table1 values (101 ,"a", [-"xyz");-] {+"xyz123");+}
Insert into table1 values (102 ,"b", "pqr");

터미널 기능을 사용하여 터미널의 출력을 더 명확하게 만들 수 있습니다( wdiff -t). 또한 -3변경된 단어로만 출력을 제한하는 옵션 도 있습니다 .

======================================================================
 [-"xyz");-] {+"xyz123");+}
======================================================================

아직 wdiff를 설치하지 않았다면 wdiff를 설치해야 합니다. 운영 체제에 적합한 명령을 실행 sudo apt-get install wdiff하거나 또는 sudo dnf install wdiff또는 실행하십시오 .sudo yum install wdiff

답변3

당신은 그것을 사용할 수 있습니다 :

diff -u old.sql new.sql |colordiff |diff-highlight

스크린샷

colordiff는 Ubuntu 소프트웨어 패키지입니다. 를 사용하여 설치할 수 있습니다 sudo apt-get install colordiff.

diff-hightgit에서(버전 2.9부터). 위치해 있습니다 /usr/share/doc/git/contrib/diff-highlight/diff-highlight. 당신은 당신과 함께 어딘가에 그것을 넣을 수 있습니다 $PATH. 또는에서아주 멋진 프로젝트.

답변4

나도 내 글을 썼다자신의 스크립트이 문제를 해결하려면 다음 방법을 사용하십시오.가장 긴 공통 부분 수열 알고리즘.

이것이 실행되는 방법입니다

JLDiff.py a.txt b.txt out.html

결과는 빨간색과 녹색 색상의 HTML입니다. 큰 파일은 처리하는 데 더 오랜 시간이 걸리지만, 이렇게 하면 한 줄씩 먼저 확인할 필요 없이 진정한 문자별 비교가 수행됩니다.

이 답변은 다음에서 교차 게시되었습니다.여기.

JLDiff가 pypy에서 훨씬 빠르게 실행된다는 것을 알았습니다.

관련 정보