Editar XML com SED - Ignorar a barra "/" [RESOLVIDO]

1. Editar XML com SED - Ignorar a barra "/" [RESOLVIDO]

Daniel Moreira
danielmoreira5

(usa CentOS)

Enviado em 17/09/2015 - 08:48h

Bom dia a todos,

Estou com o seguinte problema:

Preciso editar um arquivo xml que contém uma linha com o seguinte conteúdo:

<databasePassword>111111</databasePassword>

Criei um Shell Script assim:

#!/bin/bash
base_dados=1
# CONFIGURANDO CONEXÃO COM A BASE DE DADOS

cd /usr/local/se/src/configurator
chmod 750 run.sh

echo "Para confiuração da conexão com a base de dados precisaremos de algumas informações..."
echo -n "Nome da base de dados: "
read database_name
echo ""
echo -n "Usuário de conexão: "
read database_user
echo ""
echo -n "Senha de conexão: "
read database_user_pass
echo ""
echo "Editando XML de configuração..."
sed 's/<tabasePassword>111111<\/databasePassword>/<databasePassword>'$database_user_pass'<\/databasePassword>/' /usr/local/se/conf/database_config.xml


O script executa sem erros porém o arquivo não é editado.

tentei alterar o comando para os seguinte:

sed "s/<tabasePassword>111111<\/databasePassword>/<databasePassword>$database_user_pass<\/databasePassword>/" /usr/local/se/conf/database_config.xml

sed 's,<tabasePassword>111111<\/databasePassword>,<databasePassword>'$database_user_pass'<\/databasePassword>,' /usr/local/se/conf/database_config.xml

Porém de todas as formas ele executa mas não edita o arquivo e não da erro. Tentei os comandos acima também substituindo a variável $database_user_pass por um valor e rodando direto no shell e ocorre o mesmo problema.

alguém tem ideia de como posso fazer para descobrir o que está acontecendo?

Obrigado!!!


  


2. MELHOR RESPOSTA

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 24/09/2015 - 14:50h

Olá,

O erro esta comando sed... Vc esta pedindo pra ele substituir a string <tabasePassword>... mas, de acordo com a saída do seu cat, o certo seria <databasePassword>...

tente assim:

sed -i "s/<databasePassword>111111<\/databasePassword>/<databasePassword>sesuite<\/databasePassword>/" /usr/local/se/conf/database_config.xml 


abs,
---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---

3. Re: Editar XML com SED - Ignorar a barra "/" [RESOLVIDO]

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 17/09/2015 - 23:44h


Para editar o arquivo, vc usa sed -i
Lembre-se que vai perder os dados originais do arquivo, talvez seria melhor criar outro, sed .... arquivoOriginial > arquivoModificado


4. Re: Editar XML com SED - Ignorar a barra "/" [RESOLVIDO]

Daniel Moreira
danielmoreira5

(usa CentOS)

Enviado em 18/09/2015 - 08:14h

rai3mb escreveu:


Para editar o arquivo, vc usa sed -i
Lembre-se que vai perder os dados originais do arquivo, talvez seria melhor criar outro, sed .... arquivoOriginial > arquivoModificado




O -i é apenas para que o arquivo não seja exibido na tela, eu já fiz esta alteração no meso arquivo em outros campos porém este onde as tag tem a / é que está dando problema.

Daniel Moreira
Analista de Instalação


5. Re: Editar XML com SED - Ignorar a barra "/" [RESOLVIDO]

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 18/09/2015 - 10:34h

danielmoreira5 escreveu:
O -i é apenas para que o arquivo não seja exibido na tela, eu já fiz esta alteração no meso arquivo em outros campos porém este onde as tag tem a / é que está dando problema.

Daniel Moreira
Analista de Instalação


Olá Daniel,
Permita-me corrigi-lo. A opção -i do sed é para realizar a alteração diretamente no arquivo original. Logo, ele não mostra a saída tbm.

O seu problema não est na barra (vc construiu corretamente esta parte), o problema esta no caracter especial $ (considerado fim de linha). Para corrigir isso, use as aspas duplas no comando. Assim:
sed -i "s/<tabasePassword>111111<\/databasePassword>/<databasePassword>'$database_user_pass'<\/databasePassword>/" /usr/local/se/conf/database_config.xml 


OBS: Confira antes se o arquivo original esta ok, pois as execuçoes anteriores podem ter alterado seu arquivo.

abs
---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


6. Re: Editar XML com SED - Ignorar a barra "/" [RESOLVIDO]

Daniel Moreira
danielmoreira5

(usa CentOS)

Enviado em 24/09/2015 - 11:58h

olha testei té mesmo por fora do script digitando diretamente a senha no lugar do '$data_base_pass' e mesmo assim ele executa sem erros e não altera o arquivo, segue bash de comandos:

[root@localhost seinstall]# cat /usr/local/se/conf/database_config.xml
<?xml version='1.0' ?>
<database>
<databaseList>
<database>
<adoPort/>
<connectionName>sesuite</connectionName>
<databasePassword>111111</databasePassword>
<databaseUser>sesuite</databaseUser>
<db>Softexpert</db>
<domain>192.168.1.60</domain>
<driver>net.sourceforge.jtds.jdbc.Driver</driver>
<enable>true</enable>
<encrypted>false</encrypted>
<instance></instance>
<oraHome/>
<port>1433</port>
<server>sesuite</server>
<synom>false</synom>
<tableSpaceData/>
<tableSpaceIndexes/>
<tns/>
</database>
</databaseList>
</database>
[root@localhost seinstall]# sed -i "s/<tabasePassword>111111<\/databasePassword>/<databasePassword>sesuite<\/databasePassword>/" /usr/local/se/conf/database_config.xml
[root@localhost seinstall]# cat /usr/local/se/conf/database_config.xml <?xml version='1.0' ?>
<database>
<databaseList>
<database>
<adoPort/>
<connectionName>sesuite</connectionName>
<databasePassword>111111</databasePassword>
<databaseUser>sesuite</databaseUser>
<db>Softexpert</db>
<domain>192.168.1.60</domain>
<driver>net.sourceforge.jtds.jdbc.Driver</driver>
<enable>true</enable>
<encrypted>false</encrypted>
<instance></instance>
<oraHome/>
<port>1433</port>
<server>sesuite</server>
<synom>false</synom>
<tableSpaceData/>
<tableSpaceIndexes/>
<tns/>
</database>
</databaseList>
</database>
[root@localhost seinstall]#


tonyhts escreveu:

danielmoreira5 escreveu:
O -i é apenas para que o arquivo não seja exibido na tela, eu já fiz esta alteração no meso arquivo em outros campos porém este onde as tag tem a / é que está dando problema.

Daniel Moreira
Analista de Instalação


Olá Daniel,
Permita-me corrigi-lo. A opção -i do sed é para realizar a alteração diretamente no arquivo original. Logo, ele não mostra a saída tbm.

O seu problema não est na barra (vc construiu corretamente esta parte), o problema esta no caracter especial $ (considerado fim de linha). Para corrigir isso, use as aspas duplas no comando. Assim:
sed -i "s/<tabasePassword>111111<\/databasePassword>/<databasePassword>'$database_user_pass'<\/databasePassword>/" /usr/local/se/conf/database_config.xml 


OBS: Confira antes se o arquivo original esta ok, pois as execuçoes anteriores podem ter alterado seu arquivo.

abs
---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---




Daniel Moreira
Analista de Instalação


7. Re: Editar XML com SED - Ignorar a barra "/" [RESOLVIDO]

Daniel Moreira
danielmoreira5

(usa CentOS)

Enviado em 24/09/2015 - 15:24h

tonyhts escreveu:

Olá,

O erro esta comando sed... Vc esta pedindo pra ele substituir a string <tabasePassword>... mas, de acordo com a saída do seu cat, o certo seria <databasePassword>...

tente assim:

sed -i "s/<databasePassword>111111<\/databasePassword>/<databasePassword>sesuite<\/databasePassword>/" /usr/local/se/conf/database_config.xml 


abs,
---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


Puts :S de tanto mexer nisto eu estou meio vesgo, caramba esta era a raiz de todo problema. agora deu certo. muito obrigado!!!

Daniel Moreira
Analista de Instalação