您也許可以使用Charles Sprayberry鏈接到上面的問題的答案中給出的LOAD_FILE
函數。這將是這樣的:
mysql -p -u user -e "update my_table set body=load_file('/path/to/filename') where id=x;" dbname
如果不適合你的工作(例如,由於權限問題或諸如此類的東西),然後你不同的解決您的問題,通過和Bash的特點sed
解決您的現有命令,如下所示:
大多數特殊字符(如換行符和whatnot)在單引號字符串中似乎都很好。應該成爲問題的唯一字符是'
(將被解釋爲終止字符串)和\
(這將被解釋爲引入轉義序列),並且這兩個字符都可以通過在\
(例如,'\''
和'\\'
分別是表示'
和\
的字符串)。這sed
腳本插入\
之前的任何'
或\
:
s/\('\|\\\)/\\\1/g
你可以從Bash的調用是這樣的:
sed 's/\('"'"'\|\\\)/\\\1/g' filename
(例如,如果filename
包含此:
a \ b \ c
d ' e ' f
然後sed 's/\('"'"'\|\\\)/\\\1/g' filename
將打印此:
a \\ b \\ c
d \' e \' f
)。但是你不能僅僅在`...`
中包裝上述內容,因爲這些字符對Bash也是特殊的,它會變得混亂。 (我假設你使用的是Bash?)相反,你需要使用$(...)
,這是一個Bash符號,相當於`...`
,只是它更好地處理了這樣的各種細節。 (我建議您始終使用$(...)
超過`...`
)。所以你的整體命令是:
mysql -p -u user -e "update my_table set body='$(sed 's/\('"'"'\|\\\)/\\\1/g' filename)' where id=x;" dbname
我對一些細節還不清楚。你可以給出一個完整文件的(簡短)例子,以及如果這個文件是可以使用的SQL語句嗎? – ruakh 2012-01-12 20:18:11
(特別是,我不清楚的是:整個文件應該放入單個表格單元格中,還是應該將文件的每一行放入單獨的行中?) – ruakh 2012-01-12 20:27:09
@ruakh整個文件應該被轉移到現有行的單個表格單元中。你是對的'專欄'是非常誤導,我會改變, – user1146332 2012-01-12 22:07:26