Подтвердить что ты не робот

Как использовать переменные в команде в sed?

У меня abc.sh:

exec $ROOT/Subsystem/xyz.sh

В unix-окне, если я печатаю echo $HOME, тогда я получаю /HOME/COM/FILE

Я хочу заменить $ROOT на $HOME с помощью sed

Ожидаемый результат:

exec /HOME/COM/FILE/Subsystem/xyz.sh

Я пробовал, но не получал ожидаемого результата:

sed  's/$ROOT/"${HOME}"/g' abc.sh > abc.sh.1

Дополнение:

Если у меня есть abc.sh

exec $ROOT/Subsystem/xyz.sh $ROOT/ystem/xyz1.sh

тогда с

sed "s|\$INSTALLROOT/|${INSTALLROOT}|" abc.sh

Это только замена первого $ROOT означает, что вывод идет как

exec /HOME/COM/FILE/Subsystem/xyz.sh $ROOT/ystem/xyz1.sh
4b9b3361

Ответ 1

Скажи:

sed "s|\$ROOT|${HOME}|" abc.sh

Примечание:

  • Используйте двойные кавычки, чтобы sed расширять переменные.
  • Используйте разделитель, отличный от /, поскольку замена содержит /
  • Побегите $ в шаблоне, так как вы не хотите его избегать.

EDIT: Чтобы заменить все вхождения $ROOT, скажем

sed "s|\$ROOT|${HOME}|g" abc.sh

Ответ 2

Это может сработать для вас:

sed 's|$ROOT|'"${HOME}"'|g' abc.sh > abc.sh.1