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

时间:2013-10-03 06:06:49

标签: 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/xyz.sh $ROOT/ystem/xyz1.sh

然后用

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

它只替换第一个$ROOT,即输出为

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

3 个答案:

答案 0 :(得分:97)

说:

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

注意:

  • 使用双引号,以便sed扩展变量。
  • 使用不同于/的分隔符,因为替换内容包含/
  • 逃离模式中的$,因为您不想逃避它。

编辑:为了替换所有出现的$ROOT,请说

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

答案 1 :(得分:21)

这可能对您有用:

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

答案 2 :(得分:1)

This may also can help

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