J'ai un fichier avec le contenu suivant:
<username><![CDATA[name]]></username>
<password><![CDATA[password]]></password>
<dbname><![CDATA[name]]></dbname>
et je dois créer un script qui modifie le "nom" de la première ligne en "quelque chose", le "mot de passe" de la deuxième ligne en "quelque chose de différent" et le "nom" de la troisième ligne en "quelque chose de différent". Je ne peux pas compter sur l'ordre de ces occurrences dans le fichier, je ne peux donc pas simplement remplacer la première occurrence de "name" par "quelque chose" et la seconde occurrence de "name" par "quelque chose de différent". En fait, je dois rechercher les chaînes environnantes pour trouver et remplacer la bonne chose.
Jusqu'à présent, j'ai essayé cette commande pour trouver et remplacer la première occurrence de "name":
sed -i "s/<username><![CDATA[name]]><\/username>/something/g" file.xml
mais cela ne fonctionne pas, alors je pense que certains de ces personnages pourraient avoir besoin de s'échapper, etc.
Idéalement, j'aimerais pouvoir utiliser regex uniquement pour faire correspondre les deux occurrences "nom d'utilisateur" et ne remplacer que le "nom". Quelque chose comme ça mais avec sed
:
<username>.+?(name).+?</username>
et remplacez le contenu entre parenthèses par "quelque chose".
Est-ce possible?