Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在sed中使用bash脚本变量_Bash_Scripting_Sed - Fatal编程技术网

如何在sed中使用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

我执行以下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.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;