【发布时间】:2017-03-04 21:51:28
【问题描述】:
最终目标是替换文件中包含密码(可以包含任何字符)的行:
...
passw=old#$#$@$#@%{}[]
...
我有带替换的字符串变量: (暂时不要介意双引号)
$old="passw=old#$#$@$#@%{}[]"
$new="passw=new#$#$@$#@%{}[]"
如果我使用简单的sed -i "s#$old#$new#g" file.txt",它显然不能正常工作,因为特殊字符会破坏语法。
为了使它工作,我需要使用\ 转义所有特殊字符,例如:\[
我尝试使用这样的东西:
esc=$("$old" | sed 's/[][`~!@#$%^&*()-_=+{}\|;:",<.>/?'"'"']/\\&/g'
但是它给了我以下错误:
sed: -e expression #1, char42: Invalid range end
任何帮助将不胜感激!
【问题讨论】:
-
您在设置
esc时忘记在搜索文本中转义/。 -
也许有某种标记,所以
sed会忽略变量中的特殊字符?