Eu tenho um arquivo com o seguinte conteúdo:
<username><![CDATA[name]]></username>
<password><![CDATA[password]]></password>
<dbname><![CDATA[name]]></dbname>
e preciso criar um script que altere o "nome" na primeira linha para "alguma coisa", a "senha" na segunda linha para "outra coisa" e o "nome" na terceira linha para "alguma coisa diferente". Como não posso confiar na ordem em que ocorrem no arquivo, não posso simplesmente substituir a primeira ocorrência de "nome" por "algo" e a segunda ocorrência de "nome" por "algo diferente". Na verdade, preciso fazer uma pesquisa pelas seqüências de caracteres circundantes para ter certeza de que estou encontrando e substituindo a coisa correta.
Até agora, tentei este comando para localizar e substituir a primeira ocorrência de "nome":
sed -i "s/<username><![CDATA[name]]><\/username>/something/g" file.xml
no entanto, não está funcionando, então acho que alguns desses personagens podem precisar ser escapados etc.
Idealmente, eu adoraria poder usar regex para corresponder apenas às duas ocorrências de "nome de usuário" e substituir apenas o "nome". Algo assim, mas com sed
:
<username>.+?(name).+?</username>
e substitua o conteúdo entre parênteses por "alguma coisa".
Isso é possível?