Reemplace con sed un valor de etiqueta en una sección específica cuando coincida con una línea

Reemplace con sed un valor de etiqueta en una sección específica cuando coincida con una línea

Me gustaría cambiar una línea cuando otra línea coincide en una sección de un archivo usando el comando sed (o awk). Aquí hay un ejemplo del archivo:

Extracto de 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>

Me gustaría cambiar el valor de la etiqueta Agrupar por X3 cuando el valor de la etiqueta Álbum es X1 solo en una sección Lista de reproducción. El siguiente comando funciona bien:

sed -i '/< Album>X1/,/<\/PlayList>/ s/< Group>.*/< Group>X3<\/location>/' MyFic.txt

Pero esto no es exactamente lo que realmente quiero. Me gustaría algo como:

sed -i '/< PlayList>/,/<\/PlayList>/ {Containing  < Album>X1} s/< Group>.*/< Group>X3<\/location>/' MyFic.txt

No sé cómo codificar esta parte con el comando sed:{Containing < Album>X1}

¿Tienes alguna idea?

Respuesta1

Para manejar XML, utilice herramientas de manejo de XML adecuadas. Por ejemplo,xsh:

cd //PlayList[Album='X1']/Group
set . 'X3'

información relacionada