2013-08-07 3 views
2

Прежде всего, извиняюсь, если на это был дан ответ, но я не смог решить свою проблему.Использование переменной с sed

мне нужно искать шаблон, а затем заменить его на строки текста, состоящий из текста и variable.Btw я использую Баш ..

сказать

$var = "stacko.ver/rulz=" **Note: $var contain double quotes & = & a dot and /** 

я хочу так следуйте 1.Поиск для ;te.xt =Примечание: значение, которое будет искать; & = и точка

2.Replace его

textnum=$var 

конечно же $ вар следует заменить его фактическим значением

Мои попытки

sed -i "s/;te.xt =/textnum=$var/" file 
sed -i "s/;te.xt =/textnum="$var"/" file 
sed -i "s/";te.xt ="/"textnum=$var"/" file 

Ни один из них на самом деле работал, либо sed дал мне ошибку, либо значение $ var не показано в файле

Спасибо за помощь

С уважением

ответ

5

Цитирование не помогает, так как это СЕПГ вопрос, а не вопрос Баш. Просто выберите SED s-выражение разделитель, который не появляется в тексте:

sed -i "s|;te.xt =|textnum=$var|" file 

Вы можете выбрать любой разделитель для s, который не появляется в вашем входе. sed -e 'streetlight' - совершенно правильная команда sed.

+0

Perfect .......... – user2650277

2

Я вижу ошибку:

$ var="stacko.ver/rulz=" 
$ data="foo ;te.xt = bar" 
$ sed "s/;te.xt =/textnum=$var/" <<< "$data" 
sed: -e expression #1, char 31: unknown option to `s' 

Проблема заключается в том, что $var содержит косую черту, так СЕПГ s/// команды ломаясь. Вы должны выбрать символ, который не отображается в $ вар

$ sed "s#;te.xt =#textnum=$var#" <<< "$data" 
foo textnum=stacko.ver/rulz= bar 

Это может быть трудно - что, если слэш и хэш в $ вар? Используя bash, вы можете использовать ANSI-C quoting для использования управляющего символа, который вряд ли появится в ваших данных, например.

$ sed $'s\037;te.xt =\037textnum=$var\037' <<< "$data" 
foo textnum=stacko.ver/rulz= bar 
+0

Ваше объяснение было очень полезно, грустно, что я еще не могу выдвинуть – user2650277