Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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
Regex 删除csv文件中不正确的字段拆分后的换行符_Regex_Csv_Sed_Split_Newline - Fatal编程技术网

Regex 删除csv文件中不正确的字段拆分后的换行符

Regex 删除csv文件中不正确的字段拆分后的换行符,regex,csv,sed,split,newline,Regex,Csv,Sed,Split,Newline,我使用linux,我正在尝试使用sed来实现这一点。我从一个机构网站下载了一个CSV,提供了一些需要分析的数据。每个CSV有几千行,每行有许多列(我还没有计算它们,但我认为这个数字是无用的)。字段之间用分号分隔并加引号,因此每行的格式为: "Field 1";"Field 2";"Field 3"; .... ;"Field X"; 每个正确的行都以分号和“\n”结尾。问题是,有时会有一些字段不正确地包含换行符,解决方法是删除换行符,因此这两行会返回到一起,变成一行。错误行的示例: "Fie

我使用linux,我正在尝试使用sed来实现这一点。我从一个机构网站下载了一个CSV,提供了一些需要分析的数据。每个CSV有几千行,每行有许多列(我还没有计算它们,但我认为这个数字是无用的)。字段之间用分号分隔并加引号,因此每行的格式为:

"Field 1";"Field 2";"Field 3";  .... ;"Field X";
每个正确的行都以分号和“\n”结尾。问题是,有时会有一些字段不正确地包含换行符,解决方法是删除换行符,因此这两行会返回到一起,变成一行。错误行的示例:

"Field 1";"Field 2";"Fi
eld 3";"Field X";
我发现可以在开头引号之后或引号之间的某处有一个\n

我找到了处理最后一个案例的方法,其中换行符就在报价之后:

sed ':a;N;$!ba;s/";"\n/";"/g' file.csv
但不适用于“引号后的任意数量的字母字符不以分号结尾”。我有一个模式文件(与-f一起使用),其中包含以下行:

:a;N;$!ba;s/";"\n/";"/g
:a;N;$!ba;s/\([A-z]\)\n/\1/g
:a;N;$!ba;s/\([:alpha:]\)\n/\1/g

模式文件的第一行可以工作,但我尝试了第二行和第三行的组合,我总是得到一个空文件。

如果当前行没有以分号结尾,请读取并将下一行附加到模式空间,并删除换行符

sed '/[^;]$/{N;s/\n//}' file

也许新添加的行也可能与第一个条件匹配,在这种情况下需要一个循环,即
sed:a/[^;]$/{N;s/\N//;ba}文件