bash,在bash中的SQL语句中转义撇号

时间:2017-01-20 15:25:11

标签: bash

我正在尝试阅读包含很长单词列表的文本文件,并将它们及其长度插入数据库以供进一步分析。

我的脚本一直工作,直到它到达带有撇号的单词。我现在拥有的是:

#!/bin/bash
inputfile="words.txt"
cat $inputfile | while read word; do
    echo "INSERT INTO words (word, word_size) VALUES ('$word', CHAR_LENGTH('$word'));"
done | mysql -u root -p crossword

给出的错误是:

ERROR 1064 (42000) at line 170: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's', CHAR_LENGTH('abbey's'))' at line 1

2 个答案:

答案 0 :(得分:0)

你需要在mysql中通过'转义''。试试这个:

#!/bin/bash
inputfile="words.txt"
cat $inputfile | while read word; do
    echo "INSERT INTO words (word, word_size) VALUES (\"${word/\'/''}\", CHAR_LENGTH(\"${word/\'/''}\"));"
done | mysql -u root -p crossword

答案 1 :(得分:0)

又快又脏:)

'应该转发为\'''(双撇号)。

以下示例使用\'

sed "s/'/\\\'/g;s/.*/INSERT INTO words (word, word_size) VALUES ('&', CHAR_LENGTH('&'));/" < words.txt | mysql -u root -p pass

Ps:但是,请仔细检查@ chepner的评论:)