Tengo un archivo con los siguientes contenidos:
<username><![CDATA[name]]></username>
<password><![CDATA[password]]></password>
<dbname><![CDATA[name]]></dbname>
y necesito hacer un script que cambie el "nombre" en la primera línea a "algo", la "contraseña" en la segunda línea a "algo más" y el "nombre" en la tercera línea a "algo diferente". No puedo confiar en el orden de estos en el archivo, por lo que no puedo simplemente reemplazar la primera aparición de "nombre" con "algo" y la segunda aparición de "nombre" con "algo diferente". De hecho, necesito hacer una búsqueda de las cadenas circundantes para asegurarme de encontrar y reemplazar lo correcto.
Hasta ahora he intentado este comando para encontrar y reemplazar la primera aparición de "nombre":
sed -i "s/<username><![CDATA[name]]><\/username>/something/g" file.xml
Sin embargo, no funciona, así que creo que algunos de estos personajes podrían necesitar escapar, etc.
Idealmente, me encantaría poder usar expresiones regulares para que coincida con las dos ocurrencias de "nombre de usuario" y reemplazar solo el "nombre". Algo como esto pero con sed
:
<username>.+?(name).+?</username>
y reemplace el contenido entre paréntesis con "algo".
es posible?