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