Perl: Как заменить _ [0-9] запятой в perl или любом другом языке - PullRequest
1 голос
/ 13 июля 2011

У меня есть файл со следующей схемой '21pro_ABCD_EDG_10800_48052_2 0.0'

Как заменить _ [0-9] на, (запятая) так что я могу получить вывод как

21pro_ABCD_EDG, 10800,48052,2, 0,0

Ответы [ 3 ]

6 голосов
/ 13 июля 2011

Для замены _[0-9] на , вы можете сделать this :

$s =~ s/_([0-9])/,$1/g 

#the same without capturing groups
$s =~ s/_(?=[0-9])/,/g;

Edit: Чтобы получить дополнительную запятую после 2, вы можете сделать это:

#This puts a , before all whitespace.
$s =~ s/_(?=[0-9])|(?=\s)/,/g;

#This one puts a , between [0-9] and any whitespace
$s =~ s/_(?=[0-9])|(?<=[0-9])(?=\s)/,/g;
1 голос
/ 13 июля 2011

Подход sed будет выглядеть примерно так:

rupert@hake:~ echo '21pro_ABCD_EDG_10800_48052_2 0.0' | sed 's/_\([0-9]\)/,\1/g'
21pro_ABCD_EDG,10800,48052,2 0.0
0 голосов
/ 13 июля 2011

Используя выражение, упомянутое jacob, здесь приведен фрагмент кода для замены большого файла

#!/usr/local/bin/perl
open (MYFILE, 'test');
while (<MYFILE>) {
    chomp;
    $s=$_;
    $s =~ s/_(?=[0-9])|(?<=[0-9])(?=\s)/,/g;
    $s =~ s/\s//g;
    print "$s\n";
}

close (MYFILE);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...