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

_______________________________________________
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to