我正在将数据库从Sybase迁移到MySQL。为此,我将导出.csv文件中的表,然后将它们加载到MySQL中的新表中。在执行此操作时,在MySQL中将空值转换为0,因此我需要编辑.csv文件以找到没有值的地方,并将它们替换为NULL。
编辑:我正在从.csv中的Sybase导出.csv文件,并在Unix虚拟机中使用它们.
空值可能出现在中间列: 3,,,4,5 --这里应该是3,NULL,NULL,4,5。为此,我成功地使用了:
sed -i -e 's/,,/,NULL,/g' file_name.csv(并运行两次)。
问题是当空值出现在最后一列时: 3,4,5,这看起来应该是3,4,5,空。
在文本编辑器中,我成功地使用了查找和替换: Find:,\r\n替换:,NULL\r\n
我想从Unix终端自动化这一点,但它不起作用。我试过:
sed -i -e 's/,\r\n/,NULL\r\n/' file_name.csv
sed -i -e 's/,\\r\\n/,NULL\\r\\n/' file_name.csv谢谢!
发布于 2018-10-25 06:48:52
因为您有Windows结束,所以需要在输入文件上运行dos2unix。
然后,您只需要在行尾匹配,,并将它们替换为,NULL。
下面是一个例子:
dos2unix -n file_in.csv file_out.csv
sed -i 's/,$/,NULL/' file_out.csv注意:
-i将更改file_out.csv,$匹配行尾的, ($)sed在行上操作,因此不需要g修饰符,因为每行上只有一行的一端。发布于 2018-10-24 21:03:02
使用两次
sed -ir 's/(^|,)(,|$)/\1null\2/g' file_name.csv或者一次
sed -ir 's/(^|,)(,|$)/\1null\2/g;s/(^|,)(,|$)/\1null\2/g' file_name.csv或者一次
sed -ir ':a;s/(^|,)(,|$)/\1null\2/g;ta' file_name.csv这将将空行更改为null。
https://stackoverflow.com/questions/52973559
复制相似问题