[CLOSED]команда sed

egoregor

как подставить sed "s|x|[${a[@]:0}]|g" все перепробовал, то жалуется на ':0' как опцию, то говорит не ограниченный s.
надо заменить x на вектор ${a[@]:0}
 

san885

экранировать обратным слешом фигурные скобки надо
damnbook ~ % cat test
x x test x
test x
damnbook ~ % sed "s|x|[$\{a[@]:0\}]|g" test
[${a[@]:0}] [${a[@]:0}] test [${a[@]:0}]
test [${a[@]:0}]

egoregor

тогда проще совсем выключить sed ' ... ' было бы. мне надо, чтобы вектор давал значение.
самое терпимое, что пришло пока в голову, b=$(echo ${a[@]:0}); echo "xx" | sed "s:xx:${b}:g"

san885

оу, тупанул.
а разве b=$a[@]:0 не работает, как надо? к чему такие замуты с echo?

egoregor

фишка в том, что мы заменяем вектор на текстовую строку с помощью echo, иначе ты получишь еще один вектор b

san885

по правде сказать, вообще впервые столкнулся с векторами в шелле... и гугл ничего не гуглит, и man показывает doxygen-инфу из STL... не дашь ссылку на мануал?

egoregor

вот к примеру:
web page

hiper-hoper

а причем тут sed и unix если у тебя проблема с bash(1) ?

egoregor

да все так:)

san885

ясно, только я не понял, при чём здесь вектор, когда это string array
по теме сдаюсь, в такие дебри шелла мне лезть не приходилось

egoregor

ясно, только я не понял, при чём здесь вектор, когда это string array
я его так назвал, потому что в качестве элементов у меня числа. сам не вдаюсь в дебри)

apl13

$ cat b.sh 
a[0]=1
a[1]=2
a[2]=3
b="${a[@]:1}"
echo $b
$ bash b.sh
2 3

Или я чего-то не понимаю?

apl13

Алсо
$ cat b.sh
a[0]=1
a[1]=2
a[2]=3
echo 'x x more x' | awk "{gsub(\"x\", \"${a[*]:1}\"); print}"
echo "x x more x" | sed "s/x/${a[*]:1}/g"
$ bash b.sh
2 3 2 3 more 2 3
2 3 2 3 more 2 3

А поскольку он у тебя численный, тебе должно быть пофигу, звезда или собака.
(Собственно, "не ограниченный s" - на самом деле, неоконченный - возникал как раз из-за разницы между @ и *.)

egoregor

А поскольку он у тебя численный, тебе должно быть пофигу, звезда или собака.
(Собственно, "не ограниченный s" - на самом деле, неоконченный - возникал как раз из-за разницы между @ и *.)
понял. спасибо)
Оставить комментарий
Имя или ник:
Комментарий: