Bash就地替换文本

时间:2017-12-03 06:17:10

标签: bash shell awk

我有一些插入语句,我想通过替换原来的值来转换为另一个环境。我的sql insert语句如下所示: -

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>'))

我被困在这里。任何暗示都会有所帮助。

1 个答案:

答案 0 :(得分:3)

我认为使用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)