1

我有一个像这样的 sed 命令来搜索和替换文件中的字符串:

sed -i -e 's/`db1`./`db2`./g' result/files1.sql

这可以很好地将文件中的 db1 替换为 db2:result/files1.sql

但是,当我将其更改为 bash 和变量格式时,它不起作用。

sed -i -e "s/`${mydbname}`./`${mydbname2}`./g" "${mypath}"

我收到如下错误:

./mycoolscript: line 241: db1: command not found
./mycoolscript: line 241: db2: command not found

任何解决方案都会很棒。

4

4 回答 4

3

如果is something you need to replace, you will need to escape通过 . 这里是

sed -i -e "s/\`${mydbname}\`./\`${mydbname2}\`./g" "${mypath}"
于 2013-10-17T06:52:33.800 回答
2

转义反引号字符

sed -i -e "s/\`${mydbname}\`./\`${mydbname2}\`./g" "${mypath}"

Bash 将反引号内的部分视为命令并首先执行该命令。

于 2013-10-17T06:46:21.063 回答
0

还有另一种方法,即仅在变量/转义序列周围对文字使用单引号和双引号。

sed -i -e 's/`'"${mydbname}"'`./`'"${mydbname2}"'`./g' "${mypath}"

由于单引号,您不必转义特殊字符。

转义特殊字符与混合使用单引号和双引号之间的权衡取决于特殊字符的数量与变量的数量。

如果有太多需要转义的字符和更少的变量,我更喜欢单引号和双引号的混合。

于 2013-10-17T08:41:42.477 回答
0

尝试这个

sed -i -e "s/${mydbname}/${mydbname2}/g" "${mypath}"
于 2013-10-17T08:05:53.920 回答