1

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

这是一个示例:

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

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

谢谢你的帮助!


编辑:输出自cat

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

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

4

4 回答 4

0

这应该工作:

  perl -pe 's/(?<\!;)\n//g' file.csv
于 2013-05-01T08:51:09.413 回答
0

现在我找到了解决方案。我newlines直接在我的mysql export script. 我认为这是最简单和最快的方法。

于 2013-05-08T06:16:41.330 回答
0
 sed "s/\\\n$//g" mycsvfile

mycsvfile means the file name of the csv file
于 2013-05-01T08:57:56.240 回答
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;;
于 2013-05-01T09:09:27.933 回答