正则表达式将空格转换为逗号

时间:2015-09-11 21:53:22

标签: regex perl

我有一个包含以下数据的文件

Name        Id    Contact        Email
raj       3232    408333       ra@gmail.com
anu      353453   409242       anu@yahoomail.com

我想用以下数据替换上面的文件。

Name,Id,Contact,Email
raj,3232,408333,ra@gmail.com
anu,353453,409242,anu@yahoomail.com

用逗号替换行中的所有空格,并忽略每个新行之间的空格。我怎么能实现这个?

我在线阅读$value =~ s/\s+/,/g;会转换一行中的所有空格和制表符,并用逗号替换它。但它并没有那样执行。

有人可以提出建议吗?

这是我的确切代码。它可能会有点混乱。但在这里。该文件将被复制到一个数组中,然后根据需要对数组进行更改。一旦做出更改,数组就会被写回文件。

open(FILE, $filename) || die "File not found";
my @lines = <FILE>;
close(FILE);

my @newlines;
foreach(@lines) {
            $_ =~ tr/ \t/,/s;       
            push(@newlines,$_);  
}


open(my $fh, '>', $filename) or die "Could not open file '$filename' $!";
print $fh @newlines;
close($fh);

}

2 个答案:

答案 0 :(得分:2)

你可以在没有正则表达式的情况下完成:

$value =~ tr/ \t/,/s;

tr///记录在perldoc perlop(或perldoc -f tr,如果你的perldoc足够新的话)。

答案 1 :(得分:0)

要在终端上执行此操作,您可以执行此操作:

perl -pe 'tr/ /,/s' datafile.txt

要使用更改后的版本替换原始文件,只需添加i选项:

perl -pi -e 'tr/ /,/s' datafile.txt

<强>输出:

$ perl -pe 'tr/ /,/s' datafile.txt 
Name,Id,Contact,Email
raj,3232,408333,ra@gmail.com
anu,353453,409242,anu@yahoomail.com
$

$ perl -pi -e 'tr/ /,/s' datafile.txt 
$ more datafile.txt 
Name,Id,Contact,Email
raj,3232,408333,ra@gmail.com
anu,353453,409242,anu@yahoomail.com
$