我有一些插入语句,我想通过替换值来为另一个环境转换这些语句。我的 sql 插入语句如下所示:-
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>'))
我被困在这里了。任何提示都会有所帮助。
最佳答案
我认为您可以使用 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)
关于Bash 就地替换文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47615832/