Необходимо заменить часть строки другой строкой - PullRequest
0 голосов
/ 06 октября 2011

Я все еще довольно плохо знаком с 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 голосов
/ 06 октября 2011

То есть вы хотите заменить 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.

0 голосов
/ 06 октября 2011

Разве однозначное регулярное выражение не поможет?

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";
0 голосов
/ 06 октября 2011

Я подозреваю, что ваши 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...