Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 30 Nov 2008 11:25:22 -0800
From:      Drew Tomlinson <drew@mykitchentable.net>
To:        Matthew Seaman <m.seaman@infracaninophile.co.uk>
Cc:        FreeBSD Questions <freebsd-questions@freebsd.org>
Subject:   Re: Regular Expression Help
Message-ID:  <4932E8A2.6030804@mykitchentable.net>
In-Reply-To: <4932D91F.5040804@infracaninophile.co.uk>
References:  <4932CA0D.8080109@mykitchentable.net> <4932D91F.5040804@infracaninophile.co.uk>

next in thread | previous in thread | raw e-mail | index | archive | help
Matthew Seaman wrote:
> 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.

Thank you for your reply.  The particular editor I was attempting to use 
is vim 7.1.315.  However it doesn't like the above string so I tried you 
perl example verbatim.  It works and even handles such lines as:

cn=Smith-Brown Joe & Jane,

to

cn=Joe & Jane Smith-Brown,

which I hadn't considered.

I still don't really understand *why* the above works but I'm trying to 
pick it apart now.

Thanks to you and the others for the replies.

Cheers,

Drew

-- 
Be a Great Magician!
Visit The Alchemist's Warehouse

http://www.alchemistswarehouse.com




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4932E8A2.6030804>