如何用sed替换mysqldump导出CSV文件中的\N为NULL
解决mysqldump导出CSV中空值\N替换为NULL的sed问题
我懂你遇到的困扰了——用mysqldump导出CSV时,空值会被写成\N,你想用sed把所有,\N替换成,NULL,但试了好几种命令都没成功。这主要是sed对转义字符的处理规则在搞鬼,我给你几个靠谱的解决方案:
先处理转义字符的核心问题:sed里的反斜杠
\是特殊转义符,所以要匹配原文件里的\N,你得把反斜杠转义成\\才行。试试这个精准匹配,\N的命令:sed -i -e 's/",\\N/,NULL/g' test.csv这里把
",\N改成",\\N,才能让sed正确识别到原文件里的,\N模式。更通用的全局替换方案:如果你的CSV里
\N可能出现在不同位置(比如单独作为一个字段、被引号包裹等),可以直接全局替换所有\N为NULL,这样不管前后有没有引号或逗号都能处理:sed -i -e 's/\\N/NULL/g' test.csv举个例子,原文件里的
2,\N,"banana"会变成2,NULL,"banana",3,"cherry","\N"会变成3,"cherry","NULL",完美覆盖多种场景。适配不同系统的sed版本:如果你用的是macOS(BSD sed),
-i参数需要额外加一个空字符串参数,否则会报错。命令要改成:sed -i '' -e 's/\\N/NULL/g' test.csvLinux环境下的GNU sed则不需要这个空参数,直接用前面的命令就行。
要是你还有特殊的字段格式(比如带换行的CSV),那sed可能不太够用,这时候可以考虑用awk来处理,但大部分情况下上面的sed命令就能解决你的问题啦。
内容的提问来源于stack exchange,提问作者user2298034
相关产品推荐
相关产品推荐

