我想从我的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'>'”,然后错误“写入错误:设备上没有剩余空间”
我做错了什么?
答案 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