从SQL转储中划分BASH脚本中的单引号

时间:2014-02-16 21:02:16

标签: bash

我正在从MYSQL中清除一个SQL转储文件,以便它没有用户信息。该文件的大小是100s megs,除了SQL引号之外我还能使用它。我逐行浏览文件,然后使用以下形式的语句:

RESULT=echo $LINE | sed "<something>"

这很有效,直到我遇到这一行:

INSERT INTO `brand` VALUES (42,84,'','brands/large_logo/L\'OrealLogo.jpg',0);

当我回显该行时,结果是我丢失了L \'Oreal分隔符,当我尝试通过SQL加载它时,它会出错。这是带衬里的via echo $ LINE:

                                     The problem is here  v
 INSERT INTO `brand` VALUES (42,84,'','brands/large_logo/L'OrealLogo.jpg',0);

有没有办法保持回声使用\'作为转义序列'?我觉得我在这里遗漏了一些明显的东西,但却无法抓住它。

1 个答案:

答案 0 :(得分:4)

心理调试表明你正在使用while循环,但没有提供-r

$ cat file
'Notice the \' here'

$ while read LINE; do echo "$LINE"; done < file
'Notice the ' here'

$ while read -r LINE; do echo "$LINE"; done < file
'Notice the \' here'

还有其他问题,比如$(..)中缺少RESULT=echo $LINE | sed "<something>"和引用,以及您为每一行而不是流播放sed一次,但这些是分开的的问题。