如何在sed中使用bash脚本变量
我执行以下bash脚本:如何在sed中使用bash脚本变量,bash,scripting,sed,Bash,Scripting,Sed,我执行以下bash脚本: #!/bin/bash version=$1 echo $version sed 's/\${version.number}/$version/' template.txt > readme.txt 我希望用变量“version”的内容替换${version.number}的所有实例。而是插入文字文本$version 我需要做什么才能使sed使用当前值$version sed "s/\${version.number}/$version/" template.t
#!/bin/bash
version=$1
echo $version
sed 's/\${version.number}/$version/' template.txt > readme.txt
我希望用变量“version”的内容替换${version.number}的所有实例。而是插入文字文本$version
我需要做什么才能使sed使用当前值$version
sed "s/\${version.number}/$version/" template.txt > readme.txt
只有双引号才能替换美元符号。这也意味着单引号不需要转义美元符号。您也可以简单地取消对变量的引号
sed 's/'${version.number}'/'$version'/' template.txt > readme.txt
它有点旧了,但可能仍然有用。。。 对我来说,正如Philip所说,它使用了双转义(如果你使用转义括号的话,还有转义括号…):
但是美元符号必须转义,因为表达式被
sed
视为正则表达式。所以我认为它应该是\\$
@Philipp,实际上$
符号只是一个锚,当它是正则表达式(或者可能是子表达式)的最后一个字符时。但我承认我很幸运您可以选择添加转义斜杠,但它是\\\$
。对我来说效果更好。
#!/bin/bash
LIVE_DB_NAME='wordpress';
STAGING='staging';
sed -r "s/define\('DB_NAME', '[a-zA-Z0-9]+'\);/define('DB_NAME', '\\${LIVE_DB_NAME}');/" ${STAGING}/wp-config.php >tmp1;