2017-12-03 212 views
3

我有一些插入語句,我想通過替換值來替換另一個環境。我的SQL INSERT語句看起來如下: -Bash原地替換文本

INSERT INTO TABLE (col1, col2, col3, col4, col5) VALUES ('1', '/var/tmp', 'xyz, mno, pqr', '123', '<dummy value>'); 

我想將它轉化成這樣的,有沒有空格柱之間的值(),它看起來像這樣之間留有: -

INSERT INTO TABLE (col1,col2,col3,col4,col5) VALUES ('1','/var/tmp','xyz,mno,pqr','123','<dummy value>'); 

什麼我已經試過到目前爲止是這樣的: -

echo "INSERT INTO TABLE (col1, col2, col3, col4, col5) VALUES ('1', '/var/tmp', 'xyz, mno, pqr', '123', '<dummy value>')" | awk -F'[()]' '{printf "%s(%s)%s(%s)", $1, $2, $3, gensub(".*\(","",gensub(" ", "", $4))}' 

,所得輸出如下: -

INSERT INTO TABLE (col1, col2, col3, col4, col5) VALUES ('1', '/var/tmp', 'xyz, mno, pqr', '123', '<dummy value>')) 

我被困在這裏。任何線索都會有幫助。

+0

爲什麼不像'sed -E's /,/,/ g''? – Maroun

+0

@MarounMaroun,我不知道這些空格是否會在單引號之間引導或結尾。 –

+1

'sed'與正則表達式一起工作,用一個簡單的替換,你就完成了。試一試。 – Maroun

回答

2

我想你可以使用sed更簡單的解決方案:如果你不知道的逗號的位置

sed -E 's/, /,/g' 

,您可以使用正則表達式(見@anubhava comment):

sed -E 's/ *, */,/g' 

例如:

$ echo "(1, 2, 3) and (4 ,5 ,6)" | sed -E 's/ *, */,/g' 
(1,2,3) and (4,5,6) 
+1

歐普應該注意,使用'g'標誌在這裏很重要,因爲它在全球替代。 – sjsam

+0

此外,'-E'標誌可能沒有記錄在較新版本的sed手冊中,但它出於兼容性的原因,它是爲了使用擴展正則表達式。儘管就這個例子而言,我沒有看到它被正確使用。 – sjsam