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