2017-05-05 31 views
1

我一直在尋找解決方案來解決我的問題,因爲我有一個bash腳本以遞歸方式將數據輸入到MySQL數據庫中。使用tr或sed爲MySQL輸入準備字符串

有時,我想輸入的字符串包含單引號,這就是我的代碼被卡住的地方。

我想在將字符串發送到SQL處理之前對字符串運行sed或tr過濾器,並使用它將單引號更改爲轉義字符,後跟相同的引號(例如,從'\'

我曾嘗試以下關閉其他的建議,但輸出保持不變:

string="Karl's Oil Lamp" 
find="'" 
replace="\\\'" 
echo $string | sed -r 's/$find/$replace/g' 

我可以看到我的字符串保持與輸出是Karl's Oil Lamp不變。我使用tr時也有類似的運氣,儘管這可能不是我需要的解決方案。

有什麼樣的建議嗎?運行Ubuntu 16.04.2 LTS。

回答

1

使用以下sed的表達:

sed "s/'/\\\'/" <<< $string 

輸出:

Karl\'s Oil Lamp 
0

隨着參數擴展,沒有外部的工具:

$ string="Karl's Oil Lamp" 
$ echo "${string//\'/\\\'}" 
Karl\'s Oil Lamp 

這是一個擴展的fo rm "${parameter//pattern/string}",替換所有發生的patternstringpattern是一個單引號,這是我們不得不逃避\'string是一個反斜槓和報價,這兩者我們要逃避\\\'


您嘗試失敗的原因是單引號會阻止參數擴展,請參閱Environment variable substitution in sed