从用户转义替换字符串'read'

时间:2014-04-20 18:37:19

标签: regex bash sed

我有一个sed脚本,替换字符串来自用户输入,例如

echo -n "Enter identity? "
read identity
sed -i "s:^export identity=.*:export identity='$identity':g" $CFG_FILE

问题是用户可能输入对sed具有特殊含义的值,例如:

abc:abc

在这种情况下,sed语句中使用的冒号字符会导致错误。

有没有办法让用户输入任何值,但如果某个值对sed有特殊意义那么它会被转义?


请注意,这个问题类似于:https://stackoverflow.com/questions/23186445/escape-replacement-string-from-bash-source-file

1 个答案:

答案 0 :(得分:1)

由于您在替换中使用变量,因此需要转义表示分隔符的字符。使用shell参数扩展:

identity="${identity//:/\\:}"

这会 abc:abc转换为abc\:abc,将abc:def:ghi转换为abc\:def\:ghi

此外,您想使用:

read -r identity

代替。这将确保用户输入中的任何反斜杠都不会转义任何字符。