diff/patch를 사용하여 패치를 생성/적용할 때 특정 줄을 무시하시겠습니까?

diff/patch를 사용하여 패치를 생성/적용할 때 특정 줄을 무시하시겠습니까?

파일 A

Apples
Bananas
Clementines
Dates

문서 B

Apples
Blueberries
Cherries
Dates

Clementines > CherriesA와 B를 비교하여 C에 적용하면 해당 행은 변경되지만 두 번째 행(블루베리/블랙커런트/기타)은 무시되는 패치를 생성하고 싶습니다 .

파일 C(패치 전)

Apples
Blackcurrants
Clementines
Dates

파일 C(패치 후)

Apples
Blackcurrants
Cherries
Dates

이상적으로는 시퀀스가 ​​항상 파일의 동일한 위치에 나타날 것이라는 보장이 없기 때문에 컨텍스트가 있는 패치를 원합니다. 제가 보기에는 컨텍스트에 앞뒤에 어떤 형태의 와일드카드 줄이 포함될 것 Apples같습니다 Clementines.

필요한 경우 출력을 수동으로 편집할 의향이 있지만 diff컨텍스트 기반 차이를 생성하고 특정 정규식 일치 대신 와일드카드를 사용하는 반복 가능한 명령이 있다면 좋을 것입니다.

patch나는 이 패치를 C 파일을 가지고 있는 친구에게 보내고 수동으로 편집할 필요 없이 명령을 실행하게 하고 싶습니다 .

이것이 어떻게 달성될 수 있습니까?

답변1

GNU를 사용한다고 가정하면 diff원하는 정확한 패치를 생성할 수 없습니다. diff주어진 정규식과 일치하는 행을 무시 하도록 요청할 수 있습니다 .-I옵션 포함, 그러나 그러한 변경 사항만 포함하는 전체 블록은 무시됩니다. 이 경우 모든 덩어리(컨텍스트가 없더라도)는 "Banana" 및 "Clementine" 줄을 변경합니다.

diff화려한 패치 편집을 포함하지 않는 한 가지 가능성은 스크립트 ed생성을 요청하는 것입니다 .

diff -e

이것은 생산할 것입니다

2,3c
Blueberries
Cherries
.

이를 수정하여 원하는 패치를 생성할 수 있습니다.

3,3c
Cherries
.

답변2

이렇게 하면 patch(1)맞지 않는 부분이 거부 파일에 저장됩니다. 그런 다음 그것을 확인하고 포함되지 않은 꽃미남에게 지원하거나 지원하지 않을 수 있습니다.

(하드코어 플레이어의 경우) 또 다른 가능성은 패치를 편집하는 것입니다. 이 diff(1)형식은 가독성을 위해 설계되었습니다.아니요수정하세요. 줄 번호나 기타 표시를 혼동하지 않도록 주의해야 합니다.

배포용 패치를 생성하려는 경우 아마도 가장 쉬운 방법은 패치를 있는 그대로 적용하고 결과 파일을 취향에 맞게 편집한 다음 편집된 파일을 기반으로 패치를 다시 실행하는 것입니다.

관련 정보