2013-10-17 56 views
1

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

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

那是工作的罚款,以取代DB1到的文件中DB2:结果/文件下载1 .sql

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

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

我得到错误,如:

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

任何解决方案将是巨大的。

+1

为什么你需要添加'around $ {mydbname}?它使第二个sed命令认为db1是一个命令,而不是您想要替换的字符串。请注意,shell将替换“”(引号)内的任何变量,包括'COMMAND',但不会在''(单引号)内替换。 – imapollo

回答

2

逃离倒引号字符

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

击对待部分反引号内作为一个命令和第一执行这一点。

3

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

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

试试这个

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

还有一个办法,利用文字单引号仅&双引号变量/转义序列。

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

由于使用了单引号,因此不必转义特殊字符。

转义特殊字符与使用单个&双引号的混合之间的折衷取决于特殊字符数与变量数的关系。

如果有太多字符需要转义&较少的变量,我宁愿混合单个的&双引号。