我执行了以下的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所说的那样使用双重转义(如果您使用括号,请转义括号...)可以解决问题:
#!/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;
sed
将表达式视为正则表达式。所以我认为应该是\\$
。 - Philipp$
符号只有在正则表达式的最后一个字符(或子表达式)时才是锚点。但我承认我很幸运。 ;) 你可以选择添加转义斜杠,但这时就是\\\$
。 - Matthew Flaschen