I have a list of company names all in upper case; one per line. Can I use a combination of sed, tr, and other tools to automate converting them all to mixed case (i.e., initial letter uppercase, all others lower case)? There must be a shell script already written to do this, but not in the reference books I have.
I immediately blasted out a knee jerk reply:
perl -ne 'print ucfirst lc;' FILENAME will do it.
And then proceeded to read the answers others had provided.
Some suggestions caused me to wonder where the virtue of Laziness is hiding:
perl -pe 'tr/A-Z/a-z/; s/(\S+)/\u$1/g;' <filename>
Others reminded me to think before posting
My sed-fu was deficient I guess (or my sed was) so I fell back to p +erl: If you want word-case perl -pe 's/ \b (\w) ([^\s]+) \b /\1\L\2/gx' # ONE COMPANY -> One Company (rather than One company)
Oh, yes, multi word company names. How ... almost all the blathering time.
So I went back to redo my original and came up with:
perl -i -ne 's/(\b\w)/{uc $1}/eg; print;' <FILENAME>
Which I'm content with. But...can you come up with something better?
There is one nit I have with that solution. RUN4LIFE translates to Run4life rather than Run4Life. My reading of `man perlre` doesn't turn up a \ code for alpha only. The systems I have available to me at the moment don't support [:class:] for trying that out.
In reply to Case Munging by mikeraz
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |