使用tr或sed为MySQL输入准备字符串

使用tr或sed为MySQL输入准备字符串,mysql,bash,sed,tr,Mysql,Bash,Sed,Tr,我一直在寻找我的问题的解决方案,因为我有一个bash脚本递归地将数据输入MySQL数据库 有时,我想要输入的字符串包含单引号,这就是我的编码卡住的地方 在将字符串发送到SQL处理之前,我希望在字符串上运行sed或tr筛选器,并使用它将单引号更改为后跟相同引号的转义字符,例如从'到\' 我尝试了以下其他建议,但结果没有改变: string="Karl's Oil Lamp" find="'" replace="\\\'" echo $string | sed -r 's/$find/$replac

我一直在寻找我的问题的解决方案,因为我有一个bash脚本递归地将数据输入MySQL数据库

有时,我想要输入的字符串包含单引号,这就是我的编码卡住的地方

在将字符串发送到SQL处理之前,我希望在字符串上运行sed或tr筛选器,并使用它将单引号更改为后跟相同引号的转义字符,例如从
'
\'

我尝试了以下其他建议,但结果没有改变:

string="Karl's Oil Lamp"
find="'"
replace="\\\'"
echo $string | sed -r 's/$find/$replace/g'
我可以看到我的字符串保持不变,输出为
Karl's Oil Lamp
。我在使用tr时也有类似的运气,尽管这可能不是我所需要的解决方案

有什么建议吗?运行Ubuntu 16.04.2 LTS。

使用以下sed表达式:

sed "s/'/\\\'/" <<< $string

通过参数扩展,无需外部工具:

$ string="Karl's Oil Lamp"
$ echo "${string//\'/\\\'}"
Karl\'s Oil Lamp
这是
“${parameter//pattern/string}”
表单的扩展,将所有出现的
模式
替换为
字符串
<代码>模式是一个单引号,我们必须转义
\'
字符串
是反斜杠和引号,我们必须转义
\\'


尝试失败的原因是单引号阻止了参数扩展,请参阅

$ string="Karl's Oil Lamp"
$ echo "${string//\'/\\\'}"
Karl\'s Oil Lamp