편집하다

편집하다

현재 파일의 내용을 변경하려고 합니다.

orig.sas 

업데이트 파일의 내용을 일치시키세요.

new.sas

orig.sas를 new.sas로 바꾸면 일부 변경이 이루어지지만 orig.sas는 변경하고 싶지 않은 많은 디렉터리를 참조합니다.

다음 코드를 제출하면 orig.sas를 new.sas와 동일하게 만들기 위해 변경해야 하는 모든 줄이 포함된 "changes.txt" 스크립트가 출력됩니다.

diff -e orig.sas new.sas > changes.txt

changes.txt는 다음과 같습니다(전체 출력에는 더 많은 줄이 있습니다).

3668c
label DBMS=xlsx replace;
.
3649,3665d
3643d

여기에서 참조 디렉터리에서 변경된 모든 줄을 제거했으므로 코드의 본문만 영향을 받았습니다.

다음을 사용하여 이 스크립트를 sed에 제출할 수 있어야 한다고 생각합니다(목적은 변경 사항을 모두 변경하는 것입니다.txt).

sed - orig.sas < changes.txt

하지만 orig.sas를 직접 덮어쓰고 싶지 않고 버전 2 파일(예: orig_v2.sas)로 출력하는 것을 선호합니다.

내 발전은 다음에서 비롯됩니다.https://www.computerhope.com/unix/udiff.htm

답변1

diff -e결과는 에 공급(수정)되어야 합니다 ed.

노력하다

diff -e orig.sas new.sas > changes.txt
echo wq >> changes.txt

ed orig.sas < changes.txt

어디

  • wq~ 할 것이다의식과uit, 쓴 문자 수를 인쇄합니다.
  • 선택 사항은 --silent초과된 개수를 출력하지 않습니다.

자세한 내용은 을 참조하세요 man ed.

편집하다

원본 파일에 diff를 적용할 때 차이점이 보이지 않습니다 cp new.sas orig_v2.sas.

나는 당신이 이미 이것에 대해 생각했다고 생각합니다: 두 가지 alphaN과 bravoN

diff -e alpha1.sas alpha2.sas > change12.txt

(cat change12.txt
 echo w bravo2.sas
 echo q ) | ed bravo.sas

bravoN 에 대한 N개의 변경 사항이 보고됩니다 .alpha

관련 정보