Bash原地替换文本

Bash原地替换文本

问题描述:

我有一些插入语句,我想通过替换值来替换另一个环境。我的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

我想你可以使用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