Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash就地替换文本_Bash_Shell_Awk - Fatal编程技术网

Bash就地替换文本

Bash就地替换文本,bash,shell,awk,Bash,Shell,Awk,我有一些insert语句,我想通过替换适当的值来为另一个环境进行转换。我的sql insert语句如下所示:- INSERT INTO TABLE (col1, col2, col3, col4, col5) VALUES ('1', '/var/tmp', 'xyz, mno, pqr', '123', '<dummy value>'); 在表(col1、col2、col3、col4、col5)中插入值('1','/var/tmp','xyz、mno、pqr','123',');

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

INSERT INTO TABLE (col1, col2, col3, col4, col5) VALUES ('1', '/var/tmp', 'xyz, mno, pqr', '123', '<dummy value>');
在表(col1、col2、col3、col4、col5)中插入值('1','/var/tmp','xyz、mno、pqr','123',');
我想将其转换为列和()之间的值之间没有空格,如下所示:-

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))}'
插入表(col1、col2、col3、col4、col5)中的值('1'、'/var/tmp'、'xyz、mno、pqr'、'123'、'');
到目前为止,我尝试的是这样的:-

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))}'
echo“插入表(col1,col2,col3,col4,col5)中的值('1','/var/tmp','xyz,mno,pqr','123','”)|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>'))
插入表(col1、col2、col3、col4、col5)值('1'、'/var/tmp'、'xyz、mno、pqr'、'123'、'')

我被困在这里了。任何提示都会有帮助。

我认为使用
sed可以获得更简单的解决方案:

sed -E 's/, /,/g'
如果您不确定逗号的位置,可以使用正则表达式(请参阅):

例如:

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

为什么像
sed-E's/,/,/g'
这样的东西不行呢?
sed
可以与正则表达式一起工作,用一个简单的正则表达式替换,就完成了。试试看。
sed-E's/*,*/,/g'
@marounnaroun您可以将其作为答案发布。:-)这应该能解决老年退休金问题你确定你真的需要这么做吗?我希望任何数据库系统都忽略这些空间。替换它们看起来完全没有意义,无论有没有这样的空格,查询都可以正常工作。Op应该注意,在这里使用
g
标志很重要,因为它可以进行全局替换。此外,
-E
标志可能不会记录在较新版本的sed手册中,但出于兼容性原因,它会出现在那里,并用于使用扩展正则表达式。尽管如此,就这个例子而言,我并不认为它是被正确使用的。