Substitua por sed um valor de tag em uma seção específica ao corresponder a uma linha

Substitua por sed um valor de tag em uma seção específica ao corresponder a uma linha

Gostaria de alterar uma linha quando outra linha corresponder a uma seção de um arquivo usando o comando sed (ou awk). Aqui está um exemplo do arquivo:

Extrato 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>

Gostaria de alterar o valor da tag Group por X3 quando o valor da tag Album for X1 apenas em uma seção PlayList. O seguinte comando funciona bem:

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

Mas isso não é exatamente o que eu realmente quero. Eu gostaria de algo como:

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

Não sei como codificar esta parte com o comando sed:{Containing < Album>X1}

Você tem alguma ideia?

Responder1

Para lidar com XML, use ferramentas adequadas de manipulação de XML. Por exemplo,xsh:

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

informação relacionada