需要用另一个字符串替换部分字符串

时间:2011-10-06 15:57:51

标签: regex perl

我仍然是perl和regex的新手,需要一些帮助才能开始。我很乐意提供一些代码,但这就是我被困的地方。

我想要做的是我在这样的文件中有这个字符串:

dn: CN=doe\, john,OU=Users,DC=domain,DC=com

和这样的字符串:

uid: d12345

我需要进行搜索并替换以获得以下结果。

dn: uid= d12345,OU=Users,DC=domain,DC=com

任何人都可以帮我开始这个吗?非常感谢!

3 个答案:

答案 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";