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)
我想删除单元格内的所有换行符.
如何使用正则表达式或其他终端工具一般不事先知道列数?
这实际上是一个比它看起来更难的问题,在我看来,这意味着这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如果您愿意)