我有一个这样的sed命令用于搜索和替换文件中的字符串:
sed -i -e 's/`db1`./`db2`./g' result/files1.sql
可以正常工作,将db1替换为db2到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
任何解决方案都会很棒。
答案 0 :(得分:3)
如果是is something you need to replace, you will need to escape
。这是
sed -i -e "s/\`${mydbname}\`./\`${mydbname2}\`./g" "${mypath}"
答案 1 :(得分:2)
逃离反引号字符
sed -i -e "s/\`${mydbname}\`./\`${mydbname2}\`./g" "${mypath}"
Bash将反引号中的部分视为命令并首先执行该命令。
答案 2 :(得分:0)
试试这个
sed -i -e "s/${mydbname}/${mydbname2}/g" "${mypath}"
答案 3 :(得分:0)
还有一种方法,即使用单引号用于文字和文字。仅在变量/转义序列周围使用双引号。
sed -i -e 's/`'"${mydbname}"'`./`'"${mydbname2}"'`./g' "${mypath}"
由于单引号,您不必转义特殊字符。
逃避特殊角色与使用单曲和混合曲目之间的权衡双引号将取决于特殊字符数与变量数。
如果有太多字符需要转义&变量数量较少,我宁愿混合使用单一和变量。双引号。