Ich möchte mit dem Befehl sed (oder awk) eine Zeile ändern, wenn eine andere Zeile in einem Abschnitt einer Datei übereinstimmt. Hier ist ein Beispiel der Datei:
Auszug aus MyFic.txt:
<PlayList>
... Some tags ...
<Album>X1</Album>
... oThers tags ...
<Group>X2</Group>
... Some tags ...
</PlayList>
<PlayList>
... Some tags ...
<Album>...</Album>
... oThers tags ...
<Group>...</Group>
... Some tags ...
</PlayList>
Ich möchte den Wert des Tags „Group by X3“ (Gruppe nach X3) ändern, wenn der Tag „Album“ nur den Wert X1 hat, und zwar in einen PlayList-Abschnitt. Der folgende Befehl funktioniert einwandfrei:
sed -i '/< Album>X1/,/<\/PlayList>/ s/< Group>.*/< Group>X3<\/location>/' MyFic.txt
Aber das ist nicht genau das, was ich wirklich will. Ich hätte gerne so etwas wie:
sed -i '/< PlayList>/,/<\/PlayList>/ {Containing < Album>X1} s/< Group>.*/< Group>X3<\/location>/' MyFic.txt
Ich weiß nicht, wie ich diesen Teil mit dem sed-Befehl codieren soll:{Containing < Album>X1}
Haben Sie eine Idee?
Antwort1
Um XML zu verarbeiten, verwenden Sie geeignete XML-Verarbeitungstools. Zum Beispiel:xsh:
cd //PlayList[Album='X1']/Group
set . 'X3'