我仍然是perl和regex的新手,需要一些帮助才能开始。我很乐意提供一些代码,但这就是我被困的地方。
我想要做的是我在这样的文件中有这个字符串:
dn: CN=doe\, john,OU=Users,DC=domain,DC=com
和这样的字符串:
uid: d12345
我需要进行搜索并替换以获得以下结果。
dn: uid= d12345,OU=Users,DC=domain,DC=com
任何人都可以帮我开始这个吗?非常感谢!
答案 0 :(得分:0)
我怀疑你的DN和uids是动态的。这是有用的东西。正则表达式将一直替换CN=
,直到逗号包含您放入$uid
的任何字符串。
#!/usr/bin/env perl
use strict;
use warnings;
my $string = 'dn: CN=doe\, john,OU=Users,DC=domain,DC=com';
my $uid_str = 'uid: d12345';
my ($uid) = $uid_str =~ m/^uid:(.+)$/;
$string =~ s/CN=.+(,OU=.+$)/uid=$uid$1/;
print "String is: $string\n";
输出:String is: dn: uid= d12345,OU=Users,DC=domain,DC=com
答案 1 :(得分:0)
您想要将CN=doe\, john
替换为uid= d12345
吗?试试这个:
$uidString = "uid: d12345";
$dnString = "dn: uid= d12345,OU=Users,DC=domain,DC=com";
if( $uidString =~ /uid: (\w+)/ ) {
$uid = $1;
$dnString =~ s/CN=.+?[^\\],/uid= $uid,/;
}
这将替换从CN=
到第一个未使用uid的未转义逗号的所有内容。
答案 2 :(得分:0)
一行正则表达式不会这样做吗?
use strict;
use warnings;
my $a = "dn: CN=doe\, john,OU=Users,DC=domain,DC=com";
my $b= "uid: d12345";
#the regex
$a =~ s/CN(.*?), .*?,/$b,/;
print "$a";