Bash 就地替换文本

标签 bash shell awk

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

相关文章:

linux - date 命令不将 date 命令返回的格式转换为时间戳

linux - BASH/Linux - 从变量中查找下一个日期

bash - 如何为在 bash 中提示输入密码的命令提供密码?

mysql - 进行查询时 MySQL 使用什么 UID?

linux - 来自 bash 的 SQLite 命令

string - 在 csh 上自连接字符串

shell - 进程不能被kill -9杀死,它总是改变进程ID

linux - 简单的 awk 命令问题(FS、OFS 相关)

linux - 使用 AWK 替换列值

bash - 如何将 `rm` 文件作为 awk 操作?