Drew Tomlinson wrote:
I'm attempting to take an ldiff file and flip first/last name order. However I can not figure out how to match hyphenated last names. In vim, my current search/replace string is:

%s/cn=\(\w\+\-*\) \(\w\+\),/cn=\2 \1,/gc

This will match:

cn=Smith Joe,

and replace it with:

cn=Joe Smith,

But it will not match:

cn=Smith-Brown Joe,

nor replace it with:

cn=Joe Smith-Brown,

I've tried various incantations of escaping and quantifying yet I can not figure out how to do what I want.

Well, assuming that none of the surnames contain ',' and that the first ' '
(space) is always the delimiter between the surname and that anything else
is forenames ... % cat foo.txt cn=Smith Joe,
cn=Smith-Brown Joe,
% perl -p -e 's/cn=([^ ,]+) ([^,]+),/cn=$2 $1,/' < foo.txt cn=Joe Smith,
cn=Joe Smith-Brown,

ie. you need a s/// command that understands negated character classes.  I
think sed(1) and vi(1) will do that, but I haven't time to look up the precise
syntax.  Perl, of course, just does the job for me.



Dr Matthew J Seaman MA, D.Phil.                   7 Priory Courtyard
                                                 Flat 3
PGP: http://www.infracaninophile.co.uk/pgpkey     Ramsgate
                                                 Kent, CT11 9PW

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to