如何删除csv文件中字段内的换行符?
我有一个csv文件,其中的字段中有换行符,如下所示:如何删除csv文件中字段内的换行符?,csv,vim,Csv,Vim,我有一个csv文件,其中的字段中有换行符,如下所示: "abc" , "adef efw", "abc" "abc","awe","abc" 应该是: "abc", "adefefw","abc" "abc","awe","abc" 有人知道一些工具或脚本来解决这个问题吗?我更喜欢使用Vim。您可以将preg_replace()函数与PHP一起使用,但需要解析CSV 另一个选项可能是在PHP中使用str_getcsv()函数 第页的示例 <?php $csv = ar
"abc" , "adef
efw", "abc"
"abc","awe","abc"
应该是:
"abc", "adefefw","abc"
"abc","awe","abc"
有人知道一些工具或脚本来解决这个问题吗?我更喜欢使用Vim。您可以将preg_replace()函数与PHP一起使用,但需要解析CSV 另一个选项可能是在PHP中使用str_getcsv()函数 第页的示例
<?php
$csv = array_map('str_getcsv', file('data.csv'));
?>
一旦你把它解析成一个数组,你就可以输出它,并按照你的意愿重新格式化它。你有一个回车符或换行符的格式。 在文本编辑器中显示所有字符(我使用记事本++),您应该会看到:
\n or \r
\n是换行符,\r是回车符,不同的系统使用一个或两个
只要把它们移到应该的地方就行了。
如果您的所有字段都像示例中那样用双引号引起来,您只需删除非双引号后面的所有换行符:
%s/\([^"]\)\n/\1/
对于那些寻找非交互式解决方案的人来说,sed
在替换换行符时很难使用。但是,使用perl,可以使用与上面相同的表达式:
perl -p -e 's/([^"])\n/\1/'
我用sed写了完全相同的答案,但你抢先了我一步。:-)FTR,在OSX上也可以:sed-e':a'-e'N'-e'$!ba'-e's/([^“])\n/\1/g'my_file.csv>fixed_file.csvu不幸的是,我在OS X(Catalina)上遇到了一个错误:sed:1:“s/([^“])\n/\1/g”:\1未在“仍在搜索命令行版本”中定义。@Bjinse I添加了一个非交互式解决方案。在本例中,继续编写脚本有点过火,因为用户可以在文本编辑器中执行此操作。Vio只需按几个键就可以做到这一点。