Re: [Off} Aumentar a precisão de diff
Ronaldo Reis Junior escreveu:
vou tentar explicar melhor. Os dois são completamente diferentes, mas eu quero
um terceiro arquivo com algumas linhas do primeiro e outra linhas do segundo,
sacou?
Exemplo prático.
Eu modifico algumas entradas num arquivo de configuração, exemplo:
/etc/R/ldpaths
ao atualizar o R ele pede para re-instalar o arquivo pois há modificações. eu
re-instalo e ele cria um /etc/R/ldpaths.dpkg-old, mas eu quero colocar
novamente minhas configs sem com isto apagar as modificações realizadas pelo
mantenedor do pacote. Obviamente eu poderia simplismente fazer isto
manualmente, mas gostaria de saber como fazer isto usando alguma ferramenta
de diff. Eu tentei com o kompare que me permite selecionar quais modificações
eu quero que seja aplicada e ignorar outras. O problema é que ele trabalha
com blocos de diferenças, assim eu fico com uma situação como a descrita
acima.
/etc/R/ldpaths
: ${JAVA_HOME=}
: ${R_JAVA_LD_LIBRARY_PATH=}
: ${R_LD_LIBRARY_PATH=${R_HOME}/lib:/usr/X11R6/lib}
/etc/R/ldpaths.dpkg-old
: ${JAVA_HOME=/usr/lib/jvm/java-6-sun}
: ${R_JAVA_LD_LIBRARY_PATH=${JAVA_HOME}/jre/lib/i386/client:
${JAVA_HOME}/jre/lib/i386:${JAVA_HOME}/jre/../lib/i386}
: ${R_LD_LIBRARY_PATH=${R_HOME}/lib}
mas o que eu quero é fazer assim:
: ${JAVA_HOME=/usr/lib/jvm/java-6-sun}
: ${R_JAVA_LD_LIBRARY_PATH=${JAVA_HOME}/jre/lib/i386/client:
${JAVA_HOME}/jre/lib/i386:${JAVA_HOME}/jre/../lib/i386}
: ${R_LD_LIBRARY_PATH=${R_HOME}/lib:/usr/X11R6/lib}
Viu, algumas coisas são modificadas (linhas 1 e 2 sem quebra de linha do
e-mail) e outras devem ser ignoradas (linha 3), mas o kompare só reconhece o
bloco, então só consigo fazer o arquivo ldpaths ficar igual ao
ldpaths.dpkg-old ou vice versa.
Entenderam?
Olá,
Agora melhorou, pode fazer o seguinte, percorrer linha a linha o
arquivo atualizado e pegar apenas o que tiver até o primeiro '='; daí
mostra a linha do antigo e a linha do atualizado e pergunta qual linha
quer conservar, colocando essa linha escolhida no arquivo final; se a
linha não tiver '=' ou não constar no arquivo antigo, essa vai para o
arquivo final. Vou tentar rapidinho (sem testar):
ATUALIZADO=/etc/R/ldpaths
VELHO=/etc/R/ldpaths.dpkg-old
FINAL=/etc/R/ldpaths.final
> $FINAL
cat $ATUALIZADO | while read linha; do
variavel="${linha%%=*}"
if [ "$variavel" == "$linha" ]; then
echo "$linha" >> $FINAL
else
valor_antigo="`grep "$variavel" $VELHO`"
if [ "$valor_antigo" == "" ]; then
echo "$linha" >> $FINAL
else
resposta="X"
while [ "$resposta" != "S" ] && [ "$resposta" != "s" ] && [
"$resposta" != "N" ] && [ "$resposta" != "n" ]; do
echo
echo "Novo : $linha"
echo "Velho: $valor_antigo"
echo
echo -n "Deseja usar o valor antigo?"
read -n 1 resposta
echo
done
if [ "$resposta" == "S" ] || [ "$resposta" == "s" ]; then
echo "$valor_antigo" >> $FINAL
else
echo "$linha" >> $FINAL
fi
fi
fi
done
--
Atenciosamente,
Junior Polegato
Um peregrino de problemas; Um pergaminho de soluções!
Página Profissional: http://www.juniorpolegato.com.br
Reply to: