Ersetzen Sie mit sed einen Tag-Wert unter einem bestimmten Abschnitt, wenn eine Zeile abgeglichen wird

Ersetzen Sie mit sed einen Tag-Wert unter einem bestimmten Abschnitt, wenn eine Zeile abgeglichen wird

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'

verwandte Informationen