Regex 用于多个匹配的perl正则表达式
我有一个文件,其行与以下内容类似:Regex 用于多个匹配的perl正则表达式,regex,perl,Regex,Perl,我有一个文件,其行与以下内容类似: abcd1::101:xyz1,user,user1,abcd1,pqrs1,userblah,abcd1 我想保留字符串直到最后一个“:”并删除所有出现的abcd1 最后,我需要具备以下条件: abcd1::101:xyz1,xyz2,xyz3,pqrs1,xyz4 我尝试了下面的代码,但由于某些原因,它不起作用。所以请帮忙 账户名为“abcd1” 子更新组{ 我的$account=shift; my$file=“/tmp/group”; @ARGV=(
abcd1::101:xyz1,user,user1,abcd1,pqrs1,userblah,abcd1
我想保留字符串直到最后一个“:”并删除所有出现的abcd1
最后,我需要具备以下条件:
abcd1::101:xyz1,xyz2,xyz3,pqrs1,xyz4
我尝试了下面的代码,但由于某些原因,它不起作用。所以请帮忙
账户名为“abcd1”
子更新组{
我的$account=shift;
my$file=“/tmp/group”;
@ARGV=($file);
$^I=“.bak”;
而(){
#^($account::\d{1,$}:)$account、$1#g;
s/,$/;#删除最后一个“,”如果有
打印
}
}
不要为此使用正则表达式
use strict;
use warnings;
while (<DATA>) {
chomp;
my @parts = split(/:/, $_);
$parts[-1] = join(',', grep { !/^abcd/ } split(/,/, $parts[-1]));
print join(':', @parts) . "\n";
}
__DATA__
abcd1::101:xyz1,user,user1,abcd1,pqrs1,userblah,abcd1
abcd2::102:user1,xyz2,otheruser,abcd2,pqrs1,xyz4,abcd2
不要对此使用正则表达式
use strict;
use warnings;
while (<DATA>) {
chomp;
my @parts = split(/:/, $_);
$parts[-1] = join(',', grep { !/^abcd/ } split(/,/, $parts[-1]));
print join(':', @parts) . "\n";
}
__DATA__
abcd1::101:xyz1,user,user1,abcd1,pqrs1,userblah,abcd1
abcd2::102:user1,xyz2,otheruser,abcd2,pqrs1,xyz4,abcd2
split
是作业的工具,而不是regex
因为split
允许您可靠地将要操作的字段与不需要操作的字段分开。像这样:
#!/usr/bin/env perl
use strict;
use warnings;
my $username = 'abcd1';
while ( <DATA> ) {
my @fields = split /:/;
my @users = split ( /,/, pop ( @fields ) );
print join ( ":", @fields,
join ( ",", grep { not m/^$username$/ } @users ) ),"\n";
}
__DATA__
abcd1::101:xyz1,user,user1,abcd1,pqrs1,userblah,abcd1
#/usr/bin/env perl
严格使用;
使用警告;
我的$username='abcd1';
而(){
我的@fields=split/:/;
我的@users=split(/,/,pop(@fields));
打印联接(“:”,@字段,
加入(“,”,grep{not m/^$username$/}@users)),“\n”;
}
__资料__
abcd1::101:xyz1,用户,用户1,abcd1,pqrs1,用户blah,abcd1
split
是作业的工具,而不是regex
因为split
允许您可靠地将要操作的字段与不需要操作的字段分开。像这样:
#!/usr/bin/env perl
use strict;
use warnings;
my $username = 'abcd1';
while ( <DATA> ) {
my @fields = split /:/;
my @users = split ( /,/, pop ( @fields ) );
print join ( ":", @fields,
join ( ",", grep { not m/^$username$/ } @users ) ),"\n";
}
__DATA__
abcd1::101:xyz1,user,user1,abcd1,pqrs1,userblah,abcd1
#/usr/bin/env perl
严格使用;
使用警告;
我的$username='abcd1';
而(){
我的@fields=split/:/;
我的@users=split(/,/,pop(@fields));
打印联接(“:”,@字段,
加入(“,”,grep{not m/^$username$/}@users)),“\n”;
}
__资料__
abcd1::101:xyz1,用户,用户1,abcd1,pqrs1,用户blah,abcd1
谢谢大家的建议。下面的代码似乎也在做我想做的事情:while(){my($a,$b)=split(/:([^:]+)$/,$);$b=~s#$account,##g;$b=~s/,$/;print$a.:“$b}。谢谢大家的想法。下面的代码似乎也在做我想做的事情:while(){my($a,$b)=split(/:([^:]+)$/,$);$b=~s#$account;#g;$b=~s/,$/;print$a.:“$b;”