Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I properly match Regular Expressions?

I have a list of objects output from ldapsearch as follows:

dn: cn=HPOTTER,ou=STUDENTS,ou=HOGWARTS,o=SCHOOL
dn: cn=HGRANGER,ou=STUDENTS,ou=HOGWARTS,o=SCHOOL
dn: cn=RWEASLEY,ou=STUDENTS,ou=HOGWARTS,o=SCHOOL
dn: cn=DMALFOY,ou=STUDENTS,ou=HOGWARTS,o=SCHOOL
dn: cn=SSNAPE,ou=FACULTY,ou=HOGWARTS,o=SCHOOL
dn: cn=ADUMBLED,ou=FACULTY,ou=HOGWARTS,o=SCHOOL

So far, I have the following regex:

/\bcn=\w*,/g

Which returns results like this:

cn=HPOTTER,
cn=HGRANGER,
cn=RWEASLEY,
cn=DMALFOY,
cn=SSNAPE,
cn=ADUMBLED,

I need a regex that returns results like this:

HPOTTER
HGRANGER
RWEASLEY
DMALFOY
SSNAPE
ADUMBLED

What do I need to change in my regex so the pattern (the cn= and the comma) is not included in the results?

EDIT: I will be using sed to do the pattern matching, and piping the output to other command line utilities.

like image 558
eleven81 Avatar asked Jan 26 '09 17:01

eleven81


3 Answers

You will have to perform a grouping. This is done by modifying the regex to:

/\bcn=\(\w*\),/g

This will then populate your result into a grouping variable. Depending on your language how to extract this value will differ. (For you with sed the variable will be \1)

Note that most regex flavors you don't have to escape the brackets (), but since you're using sed you will need to as shown above.

For an excellent resource on Regular Expressions I suggest: Mastering Regular Expressions

like image 186
Gavin Miller Avatar answered Nov 12 '22 18:11

Gavin Miller


OK, the place where you asked the more specific question was closed as "exact duplicate" of this, so I'm copying my answer from there to here:

If you want to use sed, you can use something like the following:

sed -e 's/dn: cn=\([^,]*\),.*$/\1/'

You have to use [^,]* because in sed, .* is "greedy" meaning it will match everything it can before looking at any following character. That means if you use \(.*\), in your pattern it will match up to the last comma, not up to the first comma.

like image 43
Eddie Avatar answered Nov 12 '22 17:11

Eddie


Check out Expresso I have used it in the past to build my RegEx. It is good to help learning too.

like image 45
Brawndo Avatar answered Nov 12 '22 17:11

Brawndo