用 sed 替换包含 \ 的变量

用 sed 替换包含 \ 的变量

我正在尝试用文件中的$old 字符串替换字符串,其中:$new

old=ESX_10.1.1.1\@11.11.11.11
new=host_15_11_0_111.static

我正在使用 sed 命令:

sed i "s/${old}/${new}/g" /filename

但它不会替换该单词,也不会显示任何错误。我尝试过很多方法,比如替换:

sed i "s,${old},${new},g" /filename

sed i "s=${old}=${new}=g" /filename

但它不起作用。帮我解决这个问题

答案1

你需要\和另一个人一起逃脱\。您可以在 bash shell 变量中执行此操作,如下所示

sed -i -e "s/${old//\\/\\\\}/${new//\\/\\\\}/g" filename

man bash 参数扩展为了${parameter/pattern/string}。我们使用 with 的版本//来代替/重复执行。而且我们需要逃避\自身,所以它会被重复很多次。

相关内容