Заменить с помощью sed значение тега в определенном разделе при сопоставлении строки

Заменить с помощью sed значение тега в определенном разделе при сопоставлении строки

Я хотел бы изменить строку, когда другая строка совпадает с разделом файла, используя команду sed (или awk). Вот пример файла:

Выдержка из 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>

Я хотел бы изменить значение тега Group на X3, когда значение тега Album равно X1 только в разделе PlayList. Следующая команда работает отлично:

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

Но это не совсем то, что я хочу. Я бы хотел что-то вроде:

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

Я не знаю, как закодировать эту часть с помощью команды sed:{Containing < Album>X1}

У вас есть какие-нибудь идеи?

решение1

Для обработки XML используйте соответствующие инструменты обработки XML. Например,хш:

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

Связанный контент