Как использовать переменные в команде в 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
Ответы
Ответ 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