导入SQLite时转义单引号字符

6 sqlite quotes escaping sed

我有一个record.txt文件,如下所示:

INSERT INTO 'blogtitles' VALUES('Kelly's at house');
INSERT INTO 'blogtitles' VALUES('Nice catch!');
Run Code Online (Sandbox Code Playgroud)

当我尝试将records.txt导入db:sqlite3 my.db <records.txt由于第一行导致错误.我在records.txt文件中有很多这样的行.我需要一个sed语法,它将转义字符串中的所有这些单引号.因此导入时不会有任何问题.我真的需要这个:(谢谢!

Arj*_*Raj 7

SQL标准指定通过在行中放入两个单引号来转义字符串中的单引号.SQL就像Pascal编程语言一样.SQLite遵循此标准.例:

INSERT INTO xyz VALUES('5 O''clock');
Run Code Online (Sandbox Code Playgroud)

链接


Aar*_*lla 2

在一般情况下,您不能使用正则表达式执行此操作,因为它们无法计数。但如果文件看起来像这样,你可以伪造它:

sed -e "s/INSERT INTO 'blogtitles' VALUES('//" -e "s/');//" \
     -e "s/'/''/g" \
     -e "s/^/^INSERT INTO 'blogtitles' VALUES('/" -e "s/$/');/"
Run Code Online (Sandbox Code Playgroud)

即删除该行的静态部分,复制引号,然后再次附加静态部分。

如果你的例子太简单,我建议看看gawk(1)哪个可以做更复杂的处理(例如,在“','”处分割线,它可能位于两个值之间,而不是其他地方)。