需要用另一个字符串替换部分字符串
我对perl和正则表达式仍然很陌生,需要一些帮助入门。我很想提供一些代码,但这是我卡住的地方。需要用另一个字符串替换部分字符串
我想要做的是,我有这个字符串在这样的文件:
dn: CN=doe\, john,OU=Users,DC=domain,DC=com
和串这样的:
uid: d12345
我需要做一个搜索和替换以获得以下结果。
dn: uid= d12345,OU=Users,DC=domain,DC=com
任何人都可以帮我开始使用这个吗?非常感谢!
所以你要替换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第一转义逗号。
uid值是动态的,所以不一定是d + 5数字,所以不能匹配5位数字。可能是b123xyz,pin789abc等。感谢您的快速响应! – cluckinchicken
好吧,我改变了它到'\ 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
输出应该看起来像这样:dn:uid = d12345,OU = Users,DC = domain,DC = com 您是否还可以帮助解释正则表达式以帮助我获得更好的理解?非常感谢! – cluckinchicken
对不起,我仍然在学习如何正确编辑我的帖子。 :( – cluckinchicken
更新了一个更正确的输出,这个正则表达式将查找字符串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";
你们都回答了我的问题,但我不确定接受哪个答案,所以我只拿了第一个。不知道该协议... – cluckinchicken