Замініть значення sed на тег у певному розділі, коли відповідність рядку


0

Я хотів би змінити рядок, коли інший рядок збігається під розділом файлу, використовуючи команду 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>

Я хотів би змінити значення групи тегів на X3, коли значення альбому тегів становить 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}

У вас є ідея?

Відповіді:


0

Для обробки XML використовуйте належні інструменти для обробки XML. Наприклад, xsh :

cd //PlayList[Album='X1']/Group
set . 'X3'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.