Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何删除csv文件中字段内的换行符?_Csv_Vim - Fatal编程技术网

如何删除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

我有一个csv文件,其中的字段中有换行符,如下所示:

"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只需按几个键就可以做到这一点。