2014-02-16 60 views
1

我正在從MYSQL中清理SQL轉儲文件,以便它沒有用戶信息。該文件的大小爲100s,並且除SQL報價之外的所有工作。我一行一行地通過該文件,然後使用該語句的形式:從SQL轉儲中分隔BASH腳本中的單引號

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

當我回聲線,結果是:直到我碰到這條線進來

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

這真是棒極了是我失去了L'Oreal分隔符,當我嘗試通過SQL加載它時,它會得到一個錯誤。

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

有沒有辦法讓回波使用\「作爲轉義序列」:這是通過回聲$ LINE的內襯?我覺得我在這裏錯過了一些明顯的東西,但是我無法控制它。

+0

'的printf%Q「STR」'是得到適當的報價... –

回答

4

心理調試建議您使用的同時讀取循環,但不suppling -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一旦其他問題爲每一行而不是流,但這些是單獨的問題。

+0

+1這個簡單明瞭的解釋 – BMW

+0

一個偉大的方式它可能不是這裏的問題,而是'echo'某些版本也將嘗試解釋轉義序列。如果你想要打印的變量沒有被修改,使用'printf'%s \ n「」$ LINE「'而不是'echo'。 –

相關問題