如何在 sed 的命令中使用变量?
Posted
技术标签:
【中文标题】如何在 sed 的命令中使用变量?【英文标题】:How to use variables in a command in sed? 【发布时间】:2013-10-09 17:22:53 【问题描述】:我有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
【问题讨论】:
replace a string in shell script的可能重复 @tripleee 虽然我确信这将与许多其他问题重复,但您指出的问题并不是最好的问题,因为它在变量中不包含斜杠.其中的所有答案都使用/
作为分隔符。显而易见的东西,我知道,但为更好的(重复)问题留出了空间。
【参考方案1】:
说:
sed "s|\$ROOT|$HOME|" abc.sh
注意:
使用双引号,以便 shell 扩展变量。 使用不同于/
的分隔符,因为替换包含/
转义模式中的$
,因为您不想扩展它。
编辑:为了替换所有出现的$ROOT
,比如说
sed "s|\$ROOT|$HOME|g" abc.sh
【讨论】:
这完全成功了。如果它可以帮助任何人,我做了这样的事情: sed "s|@@ALF_INSTALL_DIR|$ALF_INSTALL_DIR|g" files/tomcat/alfresco-global.properties.template > files/tomcat/alfresco-global.properties变量包含“/”,因为它有一个路径(fwiw)。【参考方案2】:这可能对你有用:
sed 's|$ROOT|'"$HOME"'|g' abc.sh > abc.sh.1
【讨论】:
谢谢,我必须添加 | sed 's/[]//g' 删除括号,但除此之外它有效【参考方案3】:This may also can help
input="inputtext"
output="outputtext"
sed "s/$input/$output/" inputfile > outputfile
【讨论】:
如果输入或输出包含斜杠,这可能会出现问题 我想要一个日期变量,它看起来像 currentDate=$date sed -i '12s|(.*)|我的报告执行者:我的构建工具
执行者:$currentDate\1|' > 正如我们所见,sed -i
命令中使用了 currentDate。有没有可能让它发挥作用?
【参考方案4】:
sed -i
命令中使用了 currentDate。有没有可能让它发挥作用?https://www.baeldung.com/linux/sed-substitution-variables 的特殊字符解决方法的保险箱,\
字符的改进:
#!/bin/bash
to="/foo\\bar#baz"
echo "str %FROM% str" | sed "s#%FROM%#$(echo $to//\\/\\\\ | sed 's/#/\\#/g')#g"
【讨论】:
以上是关于如何在 sed 的命令中使用变量?的主要内容,如果未能解决你的问题,请参考以下文章
shell脚本sed命令如何使用变量替换掉包含指定字符串的整行