从csv文件中删除双引号

时间:2014-03-26 23:09:48

标签: perl sed tr

我想从我的csv文件中删除所有双引号,并且正在努力让tr,sed或perl为我工作并输出到文件:

perl -e 's/\"//g;" input.csv > output.csv 没有输出到屏幕或文件,没有创建output.csv

sed 's/\"//g' input.csv > output.csv 打印输出到屏幕,然后给出错误“无法读取>:没有这样的文件或目录”“无法读取output.csv:没有这样的文件或目录”

cat input.csv | tr -d '\"' > output.csv 给出错误“tr:extra operand'>'”,然后错误“写入错误:设备上没有剩余空间”

我做错了什么?

2 个答案:

答案 0 :(得分:5)

要让您的perl版本正常工作,您只需要-p选项即可指示打印到屏幕:

perl -pe 's/"//g' input.csv > output.csv

或者,如果您使用的是Windows,请执行以下操作:

perl -pe "s/\x22//g" input.csv > output.csv

此外,我建议使用实际的csv解析器,而不是盲目地删除csv中的双引号,而只选择从那些不需要它的字段中删除双引号。以下脚本可以这样做:

use strict;
use warnings;

use Text::CSV;

my $csv = Text::CSV->new ( { binary => 1, eol => "\n" } )
                or die "Cannot use CSV: ".Text::CSV->error_diag();

if (@ARGV != 1) {
    print "usage: $0 [csvfile]\n";
    exit;
}

while (<>) {
    $csv->parse($_);
    $csv->combine( $csv->fields() );
    print $csv->string();
}

答案 1 :(得分:3)

试试这个(未经测试):

tr -d "\"" < input > output