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

问题描述:

我对perl和正则表达式仍然很陌生,需要一些帮助入门。我很想提供一些代码,但这是我卡住的地方。需要用另一个字符串替换部分字符串

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

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

和串这样的:

uid: d12345 

我需要做一个搜索和替换以获得以下结果。

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

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

+0

你们都回答了我的问题,但我不确定接受哪个答案,所以我只拿了第一个。不知道该协议... – cluckinchicken

所以你要替换CN=doe\, johnuid= 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第一转义逗号。

+0

uid值是动态的,所以不一定是d + 5数字,所以不能匹配5位数字。可能是b123xyz,pin789abc等。感谢您的快速响应! – cluckinchicken

+0

好吧,我改变了它到'\ w +',它将尽可能匹配尽可能多的字母数字字符。 – Chriszuma

我怀疑你的DN和uid是动态的。这是有帮助的。正则表达式将一直替代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

+0

输出应该看起来像这样:dn:uid = d12345,OU = Users,DC = domain,DC = com 您是否还可以帮助解释正则表达式以帮助我获得更好的理解?非常感谢! – cluckinchicken

+0

对不起,我仍然在学习如何正确编辑我的帖子。 :( – cluckinchicken

+0

更新了一个更正确的输出,这个正则表达式将查找字符串CN =和它后面的任何字符,直到找到一个逗号和字符串OU =,它将代替从CN =到OU的所有内容, uid提供 – bot403

不会有一行代码正则表达式吗?

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