如何使用regex/terminal工具删除csv单元格中的换行符?

Mer*_*glu 4 regex unix terminal perl sed

我有一个csv文件,其中一些单元格内部有换行符.例如:

id,name 
01,"this is
with newline"
02,no newline 
Run Code Online (Sandbox Code Playgroud)

我想删除单元格内的所有换行符.

如何使用正则表达式或其他终端工具一般不事先知道列数?

Sob*_*que 6

这实际上是一个比它看起来更难的问题,在我看来,这意味着这regex不是正确的解决方案.因为您正在处理引用/转义字符串,跨越多个"行",最终会导致复杂且难以阅读regex.(这不是不可能的,它只是凌乱).

我建议改为 - 使用解析器.Perl有一个,Text::CSV它有点像这样:

#!/usr/bin/env perl

use strict;
use warnings;

use Text::CSV;

my $csv = Text::CSV->new( { binary => 1, eol => "\n" } );

while ( my $row = $csv->getline( \*ARGV ) ) {
    s/\n/ /g for @$row;
    $csv->print( \*STDOUT, $row );
}
Run Code Online (Sandbox Code Playgroud)

这将在命令行中将文件作为管道输入/指定 - 这是什么\*ARGV- 它是一个特殊的文件句柄,可以让你...基本上是sed这样做的:

somecommand.sh | myscript.pl
myscript.pl filename_to_process
Run Code Online (Sandbox Code Playgroud)

ARGV文件句柄母鹿无论是自动的.(您可以明确打开文件或使用,\*STDIN如果您愿意)


Lef*_*Bab -2

使用 notepadd++ 打开 *csv 文件,然后按 Ctrl+ H。转到选项卡替换并在搜索框中输入“换行符”,然后写入以替换要替换的单词,或者根据需要将其留空。