我正在从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);
有没有办法保持回声使用\'作为转义序列'?我觉得我在这里遗漏了一些明显的东西,但却无法抓住它。
答案 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
一次,但这些是分开的的问题。