2013-04-04 26 views
1

我有一個CSV,其中的值用分號分隔。 我需要將該CSV中的數據發送到MongoDB數據庫中的現有集合,這在實際上與這個問題無關。如何在sed中正確地轉義報價?

爲了方便,我將只使用一個樣本一行從CSV:

echo '1243;firstName' | sed "s:\([0-9]*\)\;\(.*\):mongo localhost/test --eval \\\\'db.test.update({_id\: \1}, {name\: \"\2\"})\\\\':" | xargs -I {} sh -c "{}" 

MongoDB shell version: 2.2.0 
connecting to: localhost/test 
Thu Apr 4 22:50:10 ReferenceError: firstName is not defined (shell eval):1 

的問題是,當查詢到達MongoDB的解釋,它的轉義。

我已經試過在每次報價前加3個反斜槓,但沒有任何改變。我應該如何正確地轉義引號,以便他們會留在那裏,直到查詢到達MongoDB解釋器?

+1

安置自己的sed命令所需的輸出,而不是僅僅描述它。測試一下,如果sed產生那個輸出,MongoDB(不管那是什麼!)都會接受這個文本作爲輸入。 – 2013-04-04 21:01:59

回答

2

這是更簡單,直接打電話mongo,而不是試圖把一切援引恰到好處地傳遞給xargs

while IFS=';' read id firstName; do 
    mongo localhost/test \ 
     --eval "db.test.update({_id: $id}, {name: \"$firstName\"})" 
done < file.csv