我从带有用户内容的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
。
答案 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
。我认为这是最简单,最快捷的方式。