Ich habe eine Datei mit folgendem Inhalt:
<username><![CDATA[name]]></username>
<password><![CDATA[password]]></password>
<dbname><![CDATA[name]]></dbname>
und ich muss ein Skript erstellen, das "name" in der ersten Zeile in "something", "password" in der zweiten Zeile in "somethingelse" und "name" in der dritten Zeile in "somethingdifferent" ändert. Ich kann mich nicht darauf verlassen, dass diese in der Datei in der richtigen Reihenfolge vorkommen. Daher kann ich das erste Vorkommen von "name" nicht einfach durch "something" und das zweite Vorkommen von "name" durch "somethingdifferent" ersetzen. Ich muss tatsächlich nach den umgebenden Zeichenfolgen suchen, um sicherzustellen, dass ich die richtige Sache finde und ersetze.
Bisher habe ich diesen Befehl ausprobiert, um das Vorkommen des ersten "Namens" zu finden und zu ersetzen:
sed -i "s/<username><![CDATA[name]]><\/username>/something/g" file.xml
Es funktioniert jedoch nicht, daher denke ich, dass einige dieser Zeichen möglicherweise entkommen müssen.
Im Idealfall würde ich gerne Regex verwenden, um nur die beiden Vorkommen "Benutzername" abzugleichen und nur den "Namen" zu ersetzen. So etwas aber mit sed
:
<username>.+?(name).+?</username>
und ersetzen Sie den Inhalt in den Klammern durch "etwas".
Ist das möglich?