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? Cheers, Parag