16

我执行以下 bash 脚本:

#!/bin/bash
version=$1
echo $version
sed 's/\${version.number}/$version/' template.txt > readme.txt

我期望用变量“version”的内容替换 ${version.number} 的所有实例。相反,正在插入文字文本 $version。

我需要做什么才能使 sed 使用 $version 的当前值?

4

3 回答 3

21
sed "s/\${version.number}/$version/" template.txt > readme.txt

只有双引号可以替换美元符号。这也意味着单引号不需要转义美元符号。

于 2010-07-08T13:59:13.200 回答
4

您也可以简单地取消引用变量

sed 's/'${version.number}'/'$version'/' template.txt > readme.txt
于 2013-11-25T09:29:39.047 回答
0

它有点旧,但它可能仍然有帮助......对我来说,它使用菲利普所说的双重转义(并且转义括号,如果你使用它们......):

#!/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;
于 2015-09-23T10:47:19.263 回答