mysql - 使用 sed 在字段周围添加引号,null 除外

标签 mysql linux sed

我正在使用 mysql 客户端将表的记录导出到 CSV 文件中。一切正常,除非记录有空字段。

mysql --execute="SELECT * FROM users"| sed 's/\t/","/g;s/^/"/;s/$/"/;' > users.csv

生产

"John","Smith","john@smith.com","NULL","NULL","347-1234566" 

我怎样才能产生这样的结果,其中 NULL 值被添加到文件中而没有引号

"John","Smith","john@smith.com",NULL,NULL,"347-1234566" 

最佳答案

尝试:

mysql --execute="SELECT * FROM users"| sed 's/\t/","/g; s/^/"/; s/$/"/; s/"NULL"/NULL/g' > users.csv

您的命令的唯一变化是添加了 s/"NULL"/NULL/g

如果 sed 支持前瞻或后视正则表达式功能,则可能有更复杂的方法来执行此操作,但它没有此类功能。

例子

以这个制表符分隔的文件作为示例输入:

$ cat file
John    Smith   john@smith.com  NULL    NULL    347-1234566 

您可以通过以下方式实现您想要的输出:

$ sed 's/\t/","/g; s/^/"/; s/$/"/; s/"NULL"/NULL/g' file
"John","Smith","john@smith.com",NULL,NULL,"347-1234566 "

关于mysql - 使用 sed 在字段周围添加引号,null 除外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39779687/

相关文章:

mysql - 具有多个 cms 的 MySQL 速度较慢

linux - 在 Linux 中更改 MATLAB 启动文件夹

linux - 可以找到将找到的文件的文件名推送到管道中吗?

linux - 使用 sed 或 awk 重复提取两个字符串之间的文本?

linux - 将 sed 输出发送到文件

php - 多对多数据库架构

php - 无法在 mysql 数据库中存储 stripe webhook 数据

java - 拥有多个 DAO 可以吗?

linux - 生产中使用的是单cloudera单用户模式吗?

linux - 在 bash 中比较文件的更快解决方案