diff / patchを使用してパッチを作成/適用するときは、特定の行を無視しますか?

diff / patchを使用してパッチを作成/適用するときは、特定の行を無視しますか?

ファイルA

Apples
Bananas
Clementines
Dates

文書B

Apples
Blueberries
Cherries
Dates

Clementines > CherriesAとBを比較してCに適用すると、その行は変更されますが、2番目の行(ブルーベリー/ブラックカレント/その他)は無視されるパッチを作成したいと思います。

ファイルC(パッチ前)

Apples
Blackcurrants
Clementines
Dates

ファイルC(パッチ後)

Apples
Blackcurrants
Cherries
Dates

理想的には、シーケンスが常にファイルの同じ場所に表示されるという保証がないため、コンテキスト付きのパッチが必要です。私のビューには、コンテキストに前後に何らかの種類のワイルドカード行が含まれているようApplesですClementines

必要に応じて手動で出力を編集することを望んでいますが、diffコンテキストベースの違いを生成し、特定の正規表現マッチングの代わりにワイルドカードを使用する反復可能なコマンドがあればよいでしょう。

patch私はこのパッチをCファイルを持っている友達に送り、手動で編集する必要なしにコマンドを実行させたいと思います。

これはどのように達成できますか?

ベストアンサー1

GNUを使用すると仮定すると、必要なdiff正確なパッチを作成することはできません。diff与えられた正規表現に一致する行を無視するように要求できます。-Iオプションを含めるただし、そのような変更のみを含むブロック全体は無視されます。この場合、すべての塊(コンテキストがなくても)は「Banana」と「Clementine」の行を変更します。

diffカラフルなパッチ編集を含まない1つの可能性は、スクリプトの作成をed要求することです。

diff -e

これは生産します

2,3c
Blueberries
Cherries
.

これを変更して、必要なパッチを作成できます。

3,3c
Cherries
.

おすすめ記事