Unix。命令。替换包含 \n 的表达式。数据库从 Sybase 迁移到 MySQL。 Windows-Unix纯文本编码
Unix. sed command. Replace a expression containing \n. Database migration from Sybase to MySQL. Windows-Unix plain text encoding
我正在将数据库从 Sybase 迁移到 MySQL。为此,我将表格导出到 .csv 文件中,然后将它们加载到 MySQL 中的新表格中。
执行此操作时,MySQL 中的 NULL 值将转换为 0,因此我需要编辑 .csv 文件以查找没有值的位置并将其替换为 NULL。
已编辑:我正在 Windows 中从 Sybase 导出 .csv 文件并在 Unix 虚拟机中使用它们。
空值可能出现在中间列中:
3,4,5 --这里应该是 3,NULL, NULL,4,5
为此,我成功地使用了:
sed -i -e 's/,,/,NULL,/g' file_name.csv
(运行 两次)。
问题是当 NULL 值出现在最后一列时:
3,4,5, -- 这应该看起来像 3,4,5,NULL
在文本编辑器中,我使用查找和替换成功:
查找:,\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
谢谢!
使用两次
sed -ir 's/(^|,)(,|$)/null/g' file_name.csv
或一次
sed -ir 's/(^|,)(,|$)/null/g;s/(^|,)(,|$)/null/g' file_name.csv
或一次
sed -ir ':a;s/(^|,)(,|$)/null/g;ta' file_name.csv
这会将空行更改为 null
。
因为你有 Windows CRLF 结尾,你需要 运行 dos2unix
输入文件。
然后,您只需要匹配行尾的 ,
并将它们替换为 ,NULL
.
示例如下:
dos2unix -n file_in.csv file_out.csv
sed -i 's/,$/,NULL/' file_out.csv
注:
-i
将更改 file_out.csv
,$
匹配行尾的 ,
($
)
- 由于
sed
对行进行操作,因此不需要 g
修饰符,因为每行只有 1 个行尾。
我正在将数据库从 Sybase 迁移到 MySQL。为此,我将表格导出到 .csv 文件中,然后将它们加载到 MySQL 中的新表格中。 执行此操作时,MySQL 中的 NULL 值将转换为 0,因此我需要编辑 .csv 文件以查找没有值的位置并将其替换为 NULL。
已编辑:我正在 Windows 中从 Sybase 导出 .csv 文件并在 Unix 虚拟机中使用它们。
空值可能出现在中间列中: 3,4,5 --这里应该是 3,NULL, NULL,4,5 为此,我成功地使用了:
sed -i -e 's/,,/,NULL,/g' file_name.csv
(运行 两次)。
问题是当 NULL 值出现在最后一列时: 3,4,5, -- 这应该看起来像 3,4,5,NULL
在文本编辑器中,我使用查找和替换成功: 查找:,\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
谢谢!
使用两次
sed -ir 's/(^|,)(,|$)/null/g' file_name.csv
或一次
sed -ir 's/(^|,)(,|$)/null/g;s/(^|,)(,|$)/null/g' file_name.csv
或一次
sed -ir ':a;s/(^|,)(,|$)/null/g;ta' file_name.csv
这会将空行更改为 null
。
因为你有 Windows CRLF 结尾,你需要 运行 dos2unix
输入文件。
然后,您只需要匹配行尾的 ,
并将它们替换为 ,NULL
.
示例如下:
dos2unix -n file_in.csv file_out.csv
sed -i 's/,$/,NULL/' file_out.csv
注:
-i
将更改file_out.csv
,$
匹配行尾的,
($
)- 由于
sed
对行进行操作,因此不需要g
修饰符,因为每行只有 1 个行尾。