LINUX.ORG.RU

Hаписать регулярку

 , , ,


0

2

добрый день,прошу помощи.есть такая xml

 <sst>
        <analog>0</analog>
        <framerate>тут любое значение</framerate>
</sst>
нужно в bash'e поменять значение поля framerate на p50,должно получиться так
 <sst>
        <analog>0</analog>
        <framerate>p50</framerate>
</sst>


Ответ на: комментарий от zolden

Ну ок.

(α) - matching group.
Обращение к i-той matching group происходит по \i.

По хорошему .* нужно заменить на [^<] для взятия любого символа до следующего тэга.

dmitry_malikov ★★
()
Ответ на: комментарий от zolden

а двойка в конце что значит?

Вторую matching group. В данном случае, <\/framerate>

а если все вхождения хотим поменять, а не только первое?

s///g

dmitry_malikov ★★
()

такс,ещё вопросик остался,а как сделать проверку,чтоб замена происходила только в блоке <sst>чтоб рабортало в таком случае

 
<sst>
        <analog>0</analog>
        <framerate>тут менять</framerate>
</sst>
 <ttt>
        <analog>0</analog>
        <framerate>А тут оставить</framerate>
</ttt>

tux-eda
() автор топика
Ответ на: комментарий от schizoid

нету питона,есть bash,собирать питон и все зависимости к нему,для одной конкретной задачи,думаю не стоит.особенно если эта задача на over 500 устройствах,и елси учесть что архитектура mips

tux-eda
() автор топика
Ответ на: комментарий от anonymous

представь,есть голая консоль,нет perl,python,ruby...правда есть Qt и компилятор для плюсов,но однострочником это факт проще

tux-eda
() автор топика
Ответ на: комментарий от tux-eda

Таки будет проще на плюсах, если больше ничего не ставить.

anonymous
()
Ответ на: комментарий от tux-eda

Можно так попробовать:

cat input.xml | awk '/<sst>/{Q=1}/</sst>/{Q=0}/<framerate>.*</framerate>/'{if(Q==1) { print <framerate>p50</framerate>; next } } {print}'

anonymous
()
Ответ на: комментарий от anonymous

у ТС скорее всего простейший набор тегов, и файлы гарантированно корректны
так что вполне можно и регулярками

zolden ★★★★★
()
Ответ на: комментарий от dmitry_malikov

Попрошу без фамильярностей.

Чо, звезду поймал?

anonymous
()

здраствуй, двач^w лор. есть одна xml...

anonymous
()
Ответ на: комментарий от beastie
tuxeda@localhost ~% sed '/<sst>/,/<\/sst>/s/(<framerate>).*(<\/framerate>)/\1p50\2/g' settings.xml
sed: -e выражение #1, символ 59: недопустимая ссылка \2 на RHS команды `s'
tux-eda
() автор топика
Ответ на: комментарий от tux-eda

пардон, забыл заэкранировать скобки:

$ $ cat settings.xml                                                     
<sst>
        <analog>0</analog>
        <framerate>abrakadabra</framerate>
</sst>
<xxx>
        <analog>0</analog>
        <framerate>abrakadabra</framerate>
</xxx>
<sst>
        <analog>0</analog>
        <framerate>abrakadabra</framerate>
</sst>
<xxx>
        <analog>0</analog>
        <framerate>abrakadabra</framerate>
</xxx>
$ sed '/<sst>/,/<\/sst>/s/\(<framerate>\).*\(<\/framerate>\)/\1p50\2/g' settings.xml
<sst>
        <analog>0</analog>
        <framerate>p50</framerate>
</sst>
<xxx>
        <analog>0</analog>
        <framerate>abrakadabra</framerate>
</xxx>
<sst>
        <analog>0</analog>
        <framerate>p50</framerate>
</sst>
<xxx>
        <analog>0</analog>
        <framerate>abrakadabra</framerate>
</xxx>

beastie ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.