67

我有abc.sh

exec $ROOT/Subsystem/xyz.sh

在 Unix 机器上,如果我打印echo $HOME,我会得到/HOME/COM/FILE.

我想$ROOT$HOMEsed 替换。

预期输出:

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
4

4 回答 4

135

说:

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

笔记:

  • 使用双引号,以便 shell 扩展变量。
  • 使用不同的分隔符,/因为替换包含/
  • $因为您不想扩展它,所以转义模式中的。

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

sed "s|\$ROOT|${HOME}|g" abc.sh
于 2013-10-03T06:14:32.640 回答
25

这可能对您有用:

sed 's|$ROOT|'"${HOME}"'|g' abc.sh > abc.sh.1
于 2013-10-03T06:33:03.527 回答
1
This may also can help

input="inputtext"
output="outputtext"
sed "s/$input/${output}/" inputfile > outputfile
于 2020-05-07T10:31:30.150 回答
0

来自https://www.baeldung.com/linux/sed-substitution-variables的特殊字符解决方法的安全,对 char 进行了改进\

#!/bin/bash
to="/foo\\bar#baz"
echo "str %FROM% str" | sed "s#%FROM%#$(echo ${to//\\/\\\\} | sed 's/#/\\#/g')#g"
于 2021-12-24T20:18:24.700 回答