Unix 如何在sed中的命令中使用变量?

Unix 如何在sed中的命令中使用变量?,unix,sed,Unix,Sed,我有abc.sh: exec $ROOT/Subsystem/xyz.sh 在Unix框中,如果我打印echo$HOME,则会得到/HOME/COM/FILE 我想使用sed将$ROOT替换为$HOME 预期产出: exec /HOME/COM/FILE/Subsystem/xyz.sh 我试过了,但没有得到预期的结果: sed 's/$ROOT/"${HOME}"/g' abc.sh > abc.sh.1 补充: 如果我有abc.sh exec $ROOT/Subsystem/

我有
abc.sh

exec $ROOT/Subsystem/xyz.sh
在Unix框中,如果我打印
echo$HOME
,则会得到
/HOME/COM/FILE

我想使用sed将
$ROOT
替换为
$HOME

预期产出:

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
说:

注:

  • 使用双引号,以便shell展开变量
  • 使用不同于
    /
    的分隔符,因为替换件包含
    /
  • 在模式中转义
    $
    ,因为您不想展开它
编辑:为了替换所有出现的
$ROOT
,例如

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

这可能适合您:

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

@tripleee的可能重复虽然我确信这将是许多其他问题的重复,但您指出的问题并不是最好的问题,因为它在变量中不包含斜杠。所有答案都使用
/
作为分隔符。显而易见的东西,我知道,但为更好的(重复的)问题留下了空间。如果输入或输出包含一个slashI想要的日期变量,并且看起来像currentDate=$date sed-I'12s |(.*)我的报告执行人:我的构建工具执行日期:$currentDate\1 |,如我们所见,当前日期正在
sed-i
命令中使用。有可能让它工作吗?这完全成功了。为了帮助任何人,我做了如下操作:sed“s|@@ALF|u INSTALL|u DIR${ALF|u INSTALL_DIR}| g”files/tomcat/alfresco-global.properties.template>files/tomcat/alfresco-global.properties变量包含“/”,因为它有一个路径(fwiw)。
sed 's|$ROOT|'"${HOME}"'|g' abc.sh > abc.sh.1
This may also can help

input="inputtext"
output="outputtext"
sed "s/$input/${output}/" inputfile > outputfile