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

VJS*_*VJS 52 unix sed

我有abc.sh:

exec $ROOT/Subsystem/xyz.sh
Run Code Online (Sandbox Code Playgroud)

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

我想更换$ROOT$HOME使用sed的.

预期产出:

exec /HOME/COM/FILE/Subsystem/xyz.sh
Run Code Online (Sandbox Code Playgroud)

我试过了,但我没有得到预期的输出:

sed  's/$ROOT/"${HOME}"/g' abc.sh > abc.sh.1
Run Code Online (Sandbox Code Playgroud)

加成:

如果我有 abc.sh

exec $ROOT/Subsystem/xyz.sh $ROOT/ystem/xyz1.sh
Run Code Online (Sandbox Code Playgroud)

然后用

sed "s|\$INSTALLROOT/|${INSTALLROOT}|" abc.sh
Run Code Online (Sandbox Code Playgroud)

它只是首先替换$ROOT,即输出即将到来

exec /HOME/COM/FILE/Subsystem/xyz.sh $ROOT/ystem/xyz1.sh
Run Code Online (Sandbox Code Playgroud)

dev*_*ull 101

说:

sed "s|\$ROOT|${HOME}|" abc.sh
Run Code Online (Sandbox Code Playgroud)

注意:

  • 使用双引号以sed扩展变量.
  • 使用/与替换包含时不同的分隔符/
  • 逃离$模式,因为你不想逃避它.

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

sed "s|\$ROOT|${HOME}|g" abc.sh
Run Code Online (Sandbox Code Playgroud)


pot*_*ong 21

这可能对你有用:

sed 's|$ROOT|'"${HOME}"'|g' abc.sh > abc.sh.1
Run Code Online (Sandbox Code Playgroud)