如何用perl中的逗号替换空格

时间:2014-01-23 08:35:16

标签: perl file-handling

我的perl程序

open(my $inFileHandle, '<', '/home/Ram/Desktop/TCR/input_file_TCR_05_0.txt') or die " $!";
open(my $outFileHandle, '>', '/home/Ram/Desktop/TCR/input_file_TCR_05_0_ram.txt') or die " $!";

while (my $line = <$inFileHandle>)
{
    $line =~s/05 +/,/g;   
    print $outFileHandle $line;

}

close $inFileHandle;
close $outFileHandle;`

我的程序的结果是

05,0,1–2,2,UN,praveen,kumar
05,0,3,1,UN, hari,krishna
05,0,4,1,UN,manju,nath
05,0,5–20,16,UN,sateesh,kumar

但我想要像

一样
05,0,1–2,2,UN,praveen kumar
05,0,3,1,UN, hari krishna
05,0,4,1,UN,manju nath
05,0,5–20,16,UN,sateesh kumar

请告诉我实现输出需要哪些更改。你的建议很明显

3 个答案:

答案 0 :(得分:1)

我猜你的实际程序不是s/05 +/,/而是s/ /,/s/ +/,/

如果您只想将某些空格更改为,,则正则表达式替换并不理想;我会改为:

while (my $line = <$inFileHandle>)
{
    print join ',', split / /, $line, 6;
}

答案 1 :(得分:0)

不知道你的程序的输入是什么,但我正在考虑你现在收到的输出作为输入(如果sed可以接受的话,那就是你可以接受的)

$ cat test
05,0,1–2,2,UN,praveen,kumar
05,0,3,1,UN, hari,krishna
05,0,4,1,UN,manju,nath
05,0,5–20,16,UN,sateesh,kumar

$ sed -r 's/(.*),(.*)$/\1 \2/' test
05,0,1–2,2,UN,praveen kumar
05,0,3,1,UN, hari krishna
05,0,4,1,UN,manju nath
05,0,5–20,16,UN,sateesh kumar

答案 2 :(得分:0)

您可以使用稍微复杂的正则表达式来匹配firstname / lastname对,并在它之前的所有内容上运行替换,然后连接结果以进行打印。

#!/usr/bin/perl 

while (<>){
        chomp;
        if (/(.*?\s+)(\S+\s+\S+)$/){
                ($a,$b)=($1,$2);
                $a =~ s/\s+/,/g;
                $_ = $a.$b;
        }
        print $_."\n";
}