首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unix。sed指挥部。替换包含\n数据库从Sybase迁移到MySQL的表达式。Windows-Unix纯文本编码

Unix。sed指挥部。替换包含\n数据库从Sybase迁移到MySQL的表达式。Windows-Unix纯文本编码
EN

Stack Overflow用户
提问于 2018-10-24 16:09:03
回答 2查看 419关注 0票数 1

我正在将数据库从Sybase迁移到MySQL。为此,我将导出.csv文件中的表,然后将它们加载到MySQL中的新表中。在执行此操作时,在MySQL中将空值转换为0,因此我需要编辑.csv文件以找到没有值的地方,并将它们替换为NULL。

编辑:我正在从.csv中的Sybase导出.csv文件,并在Unix虚拟机中使用它们.

空值可能出现在中间列: 3,,,4,5 --这里应该是3,NULL,NULL,4,5。为此,我成功地使用了:

代码语言:javascript
复制
sed -i -e 's/,,/,NULL,/g' file_name.csv

(并运行两次)。

问题是当空值出现在最后一列时: 3,4,5,这看起来应该是3,4,5,空。

在文本编辑器中,我成功地使用了查找和替换: Find:,\r\n替换:,NULL\r\n

我想从Unix终端自动化这一点,但它不起作用。我试过:

代码语言:javascript
复制
sed -i -e 's/,\r\n/,NULL\r\n/' file_name.csv

sed -i -e 's/,\\r\\n/,NULL\\r\\n/' file_name.csv

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-25 06:48:52

因为您有Windows结束,所以需要在输入文件上运行dos2unix

然后,您只需要在行尾匹配,,并将它们替换为,NULL

下面是一个例子:

代码语言:javascript
复制
dos2unix -n file_in.csv file_out.csv
sed -i 's/,$/,NULL/' file_out.csv

注意:

  • -i将更改file_out.csv
  • ,$匹配行尾的, ($)
  • 由于sed在行上操作,因此不需要g修饰符,因为每行上只有一行的一端。
票数 1
EN

Stack Overflow用户

发布于 2018-10-24 21:03:02

使用两次

代码语言:javascript
复制
sed -ir 's/(^|,)(,|$)/\1null\2/g' file_name.csv

或者一次

代码语言:javascript
复制
sed -ir 's/(^|,)(,|$)/\1null\2/g;s/(^|,)(,|$)/\1null\2/g' file_name.csv

或者一次

代码语言:javascript
复制
sed -ir ':a;s/(^|,)(,|$)/\1null\2/g;ta' file_name.csv

这将将空行更改为null

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52973559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档