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'