LINUX.ORG.RU

sed и замена выражения между фигурными скобками

 , ,


0

1

Всех приветствую!

есть такой файл

cat 123
# Starting MAC address (1)
        90, 20, {0x01,0x00} \
# MAC address (C00)
        50, 8, {0x00,0x0C}

#==========================================================


Хочу через sed в определённой строке, поменять выражение между фигурными скобками на какое то другое, причем хочу сделать это по шаблону.

Набросал пару вариантов и поискал в сети, но пока не получилось:

кустарный вариант
[root@localhost:~]# sed -r '/90, 20, {/s/^([^{]*{)(*.)(}\ .*)$/\1olo\3/' 123
sed: bad regex '90, 20, {': Unmatched \{

исправил regexp, но хочется оставить {
[root@localhost:~]# sed -r '/90, 20, /s/^([^{]*{)(*.)(}\ .*)$/\1olo\3/' 123
sed: bad regex '^([^{]*{)(*.)(}\ .*)$': Invalid content of \{\}

вроде так сработало
[root@localhost:~]# sed -r '/90, 20, \{/s/^([^{]*{)(*.)(}\ .*)$/\1olo\3/' 123
sed: bad regex '^([^{]*{)(*.)(}\ .*)$': Invalid content of \{\}

решил подшаманить regexp, но поменял разделитель
[root@localhost:~]# sed -r '/90, 20, /s!^([^{]*{)(*.)(}\ .*)$!\1olo\3!' 123
sed: bad regex '^([^{]*{)(*.)(}\ .*)$': Invalid content of \{\}


убрал -r , но кажется перестали работать группы:
[root@localhost:~]# sed '/90, 20, /s!^([^{]*{)(*.)(}\ .*)$!\1olo\3!' 123
# Starting MAC address (1)
        90, 20, {0x01,0x00} \
# MAC address (C00)
        50, 8, {0x00,0x0C}

#==========================================================

попробовал экранировать { и } и вернулся к тому с чего начал, шаманил с 3 матч группой
[root@localhost:~]# sed -r '/90, 20, /s!^([^\{]*{)(*.)(\}[^\}]*)$!\1olo\3!' 123
sed: bad regex '^([^\{]*{)(*.)(\}[^\}]*)$': Invalid content of \{\}

без -r  что то сделала, но тоже не так как надо

[root@localhost:~]# sed '/90, 20, /s!^([^\{]*{)(*.)(\}[^\}]*)$!\1olo\3!' 123
# Starting MAC address (1)
        90, 20, {0x01,0x00} \
# MAC address (C00)
        50, 8, {0x00,0x0C}

#==========================================================

Уже грешу на сам sed, он у меня идёт вместе с busybox

sed --version
This is not GNU sed version 4.0

может кто то подскажет куда рыть ?

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

так и знал, что есть вариант полегче

Спасибо большое, ума у меня палата, но пошёл чесать голову через жопу...

Сейчас буду применять )

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

скорее всего, раз за таким бревном в глазу не увидел соринку ;)

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