Eu li sobre diff e patch, mas não consigo descobrir como aplicar o que preciso. Eu acho que é bem simples, então, para mostrar meu problema, pegue estes dois arquivos:
a.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>
Eu quero ter uma saída, que se parece com isso (ordem não importa):
<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>
A mesclagem deve conter todas as linhas ao longo destas regras simples:
- qualquer linha que esteja apenas em um dos arquivos
- se uma linha tiver o mesmo nome, mas um valor diferente, use o valor do segundo
Eu quero aplicar esta tarefa dentro de um script bash, para que não seja necessário fazer nessesariamente o diff e o patch, se outro programa for mais adequado
diffpode dizer quais linhas estão em um arquivo, mas não no outro, mas apenas na granularidade de linhas inteiras.patché adequado apenas para fazer as mesmas alterações em um arquivo semelhante (talvez uma versão diferente do mesmo arquivo ou um arquivo totalmente diferente, no entanto, os números das linhas e as linhas adjacentes de cada alteração são idênticas ao seu arquivo original). Portanto, não, eles não são particularmente adequados para esta tarefa. Você pode querer dar uma olhada,wdiffmas a solução provavelmente requer um script personalizado. Como seus dados se parecem com XML, convém procurar alguma ferramenta XSL.