Thanks 007....

It worked out of the box.... :)

Cheers,
Parag




On Fri, Nov 13, 2009 at 8:03 PM, 7 <7stud.7s...@gmail.com> wrote:

> On Fri, Nov 13, 2009 at 5:07 AM, Parag Kalra <paragka...@gmail.com> wrote:
>
>> Hey All,
>>
>> I have a following a LDIF file to process through Perl -
>>
>> ###############################################################
>> dn: ou=71404558, ou=Company, ou=Personal, o=paragkalra.com
>> dn: ou=People, ou=71404558, ou=Company, ou=Personal, o=paragkalra.com
>> dn: ou=Groups, ou=71404558, ou=Company, ou=Personal, o=paragkalra.com
>> dn: ou=40208723, ou=Company, ou=Personal, o=paragkalra.com
>> dn: ou=People, ou=40208723, ou=Company, ou=Personal, o=paragkalra.com
>> dn: ou=Groups, ou=40208723, ou=Company, ou=Personal, o=paragkalra.com
>> dn: cn=Mygroup,ou=Groups, ou=40208723, ou=Company, ou=Personal, o=
>> paragkalra.com
>> dn: ou=63613012, ou=Company, ou=Personal, o=paragkalra.com
>> dn: cn=Manager,ou=63613012, ou=Company, ou=Personal, o=paragkalra.com
>> dn: ou=People, ou=63613012, ou=Company, ou=Personal, o=paragkalra.com
>> dn: ou=Groups, ou=63613012, ou=Company, ou=Personal, o=paragkalra.com
>> dn: ou=$%^&?()+-, ou=Company, ou=Personal, o=paragkalra.com
>> dn: ou=[]...@#%*, ou=Company, ou=Personal, o=paragkalra.com
>> dn: cn=CEO,ou=[]...@#%*, ou=Company, ou=Personal, o=paragkalra.com
>> dn: ou=76884580, ou=Company, ou=Personal, o=paragkalra.com
>> dn: ou=People, ou=76884580, ou=Company, ou=Personal, o=paragkalra.com
>> dn: ou=Groups, ou=76884580, ou=Company, ou=Personal, o=paragkalra.com
>> ################################################################
>>
>> My aim is to extract all those lines starting with the string - 'dn:ou'
>> and
>> having only 3 levels of OU heirarchy i.e having the string 'ou=' only 3
>> times. Also he value of 'ou' can be anything i.e any character (including
>> special characters) except comman (,).
>>
>> So to accomplish it I have written following code and is working -
>>
>> #################################################################
>> # Author: Parag
>>
>> my $file = $ARGV[0];
>>
>> open FILE, $file;
>>
>> while ( <FILE> ) {
>>    $count = 0;
>>    $_ =~ s/(\s)+//g;
>>    $count++ while $_ =~ /(ou=)/g;
>>    if ( ($count == 3) && ($_ =~ /^(dn:ou)/) ) {
>>        print "$_\n";
>>    }
>> }
>>
>> close FILE;
>>
>> ################################################################
>>
>>
>>
>> But I would like to accomplish it through 1 singe regex like using
>> following
>> code -
>>
>>
>> ############################################################
>> # Author: Parag
>>
>> my $file = $ARGV[0];
>>
>> open FILE, $file;
>>
>> while ( <FILE> ) {
>>    $_ =~ s/(\s)+//g;
>>    if ( $_ =~ /(dn:ou=)([\d\D]+)(ou=Company,ou=Personal,o=paragkalra.com
>> )/){
>>      print "$_\n";
>>    }
>> }
>>
>> close FILE;
>>
>> ############################################################
>> Any pointers?
>>
>
>
> Nope.   Just trial and error until you come up with an ugly hack.  I think
> this works:
>
>
> use strict;
> use warnings;
> use 5.010;
>
> open (my $INFILE, '<', shift @ARGV);
>
> while (<$INFILE>) {
>     print if /^dn: ((ou=[^,]+\s*,)\s*){3}[^,]*$/;
> }
>
> close $INFILE;
>
>
>

Reply via email to