2016-08-30 2 views
1

У меня есть один сценарий оболочки файла (BusyBox, no bash, ksh, я считаю), что я хочу написать путь к себе при запуске. Мне нужно #home для замены home =/home. У меня есть это:замена заменителя заменяет замену

var="/home" 
#home 
sed -i 's/#home/home=$var/g' /this/file.sh 

При запуске он будет заменить #home и строку в СЕПГ линии и $ вар не расширена:

var="/home" 
home=$var 
sed -i 's/home=$var/home=$var/g' /this/file.sh 

Это мой желаемый результат:

var="/home" 
home=/home 
sed -i 's/#home/home=$var/g' /this/file.sh 

Я тяну свои волосы, чтобы это работало. Любые намеки?

Ответ сам это работает, как ожидалось:

var="/home" 
#home 
sed -i "s|^#home|home=${var}/|g" m.sh 
+0

try 'sed -i" s/# home/home = $ var/g "/ this/file.sh' – Sundeep

+1

см. [Sed, заменяющий переменными оболочки] (http://stackoverflow.com/documentation/sed/ 1096/substitution/3519/substitution-using-shell-variables # t = 201608300833232824835) для дальнейшего чтения – Sundeep

+1

sed -i 's/^ # home $/home = $ var/g' – pdg

ответ

1

Хотя может быть несколько способов решения этого вопроса. Попробуйте добавить circumflex (^) в начале шаблона, чтобы указать, что этот шаблон должен быть найден в начале строки.

Перед запуском сценария (здесь он называется m.sh)

#!/bin/bash 

var="/home" 
#home 
sed -i 's/^#home/home=$var/g' m.sh 

После запуска сценария

#!/bin/bash 

var="/home" 
home=$var 
sed -i 's/^#home/home=$var/g' m.sh 

EDIT Вы можете также рассмотреть вопрос о снятии g модификатора в sed, так как вы хотите только совместить один раз в строке.

+1

Упс! Похоже, пользователь pdg прокомментировал это, пока я печатал ответ. – Harald

+0

Работает, но мне нужно home = $ var, которое нужно развернуть до home =/home – stargazer

+0

Работает в качестве разделителя и ставит var в фигурные скобки. Спасибо за помощь. – stargazer

 Смежные вопросы

  • Нет связанных вопросов^_^