替换csv文件中的\ n

时间:2013-05-01 08:20:39

标签: linux unix

我从带有用户内容的mysql导出中获得了一个csv文件。如果用户输入了一个返回,我无法正确地将csv导入另一个系统。所以我需要替换\n。这不会是一个问题,但在最后一行,还有一个我不会替换的\n

以下是一个示例:

   john;doe;false;this \n is \n a \n comment;\n
   james;bond;true;;\n

那么如何才能替换csv文件注释列中的所有\n?我知道我可以编辑最后一个新行,因为它在分号之后总是用tr -d '\n' < file.csv替换所有其他返回,但是有更聪明的方法吗?

感谢您的帮助!


编辑 cat的输出

\ohn;doe;false;This
\s
\
comment;
james;bond;true;No returns in this comment;

如果我在notepad ++或其他编辑器中打开文件,则反斜杠后面的第一个字符是可见的。使用十六进制编辑器,它会显示0D0A

4 个答案:

答案 0 :(得分:0)

这应该有效:

  perl -pe 's/(?<\!;)\n//g' file.csv

答案 1 :(得分:0)

 sed "s/\\\n$//g" mycsvfile

mycsvfile means the file name of the csv file

答案 2 :(得分:0)

尝试以下awk命令:

awk 'BEGIN{RS=";\n";FS=";";OFS=";";ORS=";\n"}{gsub("\n","",$4);print}' file

输出:

$ cat file
john;doe;false;this
is
a
comment;
james;bond;true;;


$ awk 'BEGIN{RS=";\n";FS=";";OFS=";";ORS=";\n"}{gsub("\n","",$4);print}' file
john;doe;false;this is a comment;
james;bond;true;;

答案 3 :(得分:0)

现在我找到了解决方案。我直接在newlines中删除了所有不必要的mysql export script。我认为这是最简单,最快捷的方式。