違いとパッチについて読みましたが、必要なものを適用する方法がわかりません。私はそれが非常に簡単になりたいので、私の問題を示すために、次の2つのファイルを使用してください。
XMLファイル
<resources>
<color name="same_in_b">#AAABBB</color>
<color name="not_in_b">#AAAAAA</color>
<color name="in_b_but_different_val">#AAAAAA</color>
<color name="not_in_b_too">#AAAAAA</color>
</resources>
b.xml
<resources>
<color name="same_in_b">#AAABBB</color>
<color name="in_b_but_different_val">#BBBBBB</color>
<color name="not_in_a">#AAAAAA</color>
</resources>
私は次のような出力が必要です(順序は重要ではありません)。
<resources>
<color name="same_in_b">#AAABBB</color>
<color name="not_in_b">#AAAAAA</color>
<color name="in_b_but_different_val">#BBBBBB</color>
<color name="not_in_b_too">#AAAAAA</color>
<color name="not_in_a">#AAAAAA</color>
</resources>
マージには、次の簡単な規則に従うすべての行を含める必要があります。
- ファイル内のすべての行のみ
- 1行に同じ名前タグがあるが値が異なる場合は、2行目から値を取得します。
これをbashスクリプトに適用したいので、他のプログラムがより適切な場合は、diffとパッチを使用して必ずしも行う必要はありません。
ベストアンサー1
これは必要ありませんpatch
。変更を抽出し、ファイルの未変更部分なしで送信するために使用されます。
2つのバージョンのファイルをマージするためのツールがありますが、作成されたmerge
ように@vonbrand
2つのバージョンを分岐するには「デフォルト」ファイルが必要です。なしでマージするには、diff
次のように使用します。
diff -DVERSION1 file1.xml file2.xml > merged.xml
#ifdef
#ifndef
これには、次のCスタイル/「プリプロセッサ」コマンドのすべての変更セットが含まれます。
#ifdef VERSION1
<stuff added to file1.xml>
#endif
...
#ifndef VERSION1
<stuff added to file2.xml>
#endif
2つのファイルの行または領域が異なる場合、次のような「衝突」が発生します。
#ifndef VERSION1
<version 1>
#else /* VERSION1 */
<version 2>
#endif /* VERSION1 */
したがって、出力をファイルに保存してエディタで開きます。#else
表示されるすべての場所を検索して手動で解決してください。次に、ファイルを保存して実行して、残りのgrep -v
合計#if(n)def
行#endif
を削除します。
grep -v '^#if' merged.xml | grep -v '^#endif' > clean.xml
今後は元のバージョンのファイルを保存してください。merge
追加情報があれば、より良い結果が得られます。 (ただし、注意してください。merge
を使用しない限り、これらのファイルの1つを内部で編集してください-p
。マニュアルをお読みください)。