If you spend an hour or two learning stupid vi tricks (mostly regexp substitutions), you'll be able to make those transformations interactively in the editor at the drop of a hat for the rest of your life.
For example, if you have a list like:
First1,Last1
First2,Last2
the vi command
:%s/\(^.*\),\(.\)\(.*\)/\1,\2\3,\L\1\2/
Will turn it into
First1,Last1,first1l
First2,Last2,first2l
and if you get it wrong, just hit 'u' to undo the change.
For the regexp challenged:
: = start an ex (command line mode) command in vi
% = shorthand for 1,$ in the range for the command
(i.e. the whole buffer from the first to last line)
s = substitute
/ = start 'match' portion
\( = start a grouping
^ = anchor to beginning of line
. = any character
* = any number of the previous
\) = end grouping
, = literal match outside groupings
\(.\) = grouping that matches any one character
\(.*\) = grouping that picks up the rest
/ = start 'replace' portion
\1 = what the first grouping matched
, = literal text
\2 = 2nd grouping (the one character)
\3 = 3rd grouping
\L = lowercase following
\1\2 = 1st and 2nd groups again.
/ = end replacement
One problem with complicated ex commands is that while you can undo the operation on the buffer, you can't easily recall and edit the command line itself. I usually either open another window and cut/paste to save, edit, and re-use it or type the command as a normal line in the editor and use vi's delete-to-register, execute-register, put-register commands to save and restore it. For example, with the cursor on the line with the :command typing "add will delete it to the "a" register. Typing @a will execute it. If you don't like it, u will undo the edit and "ap will put the line back in the editor.
---
Les Mikesell
les@futuresource.com
06/10/2004