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

0

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .