mikeraz has asked for the wisdom of the Perl Monks concerning the following question:
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.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Case Munging
by johngg (Canon) on Apr 16, 2009 at 21:52 UTC | |
|
Re: Case Munging
by almut (Canon) on Apr 16, 2009 at 21:22 UTC | |
|
Re: Case Munging
by morgon (Priest) on Apr 16, 2009 at 21:52 UTC | |
by morgon (Priest) on Apr 17, 2009 at 00:15 UTC | |
by AnomalousMonk (Archbishop) on Apr 17, 2009 at 02:16 UTC | |
by mikeraz (Friar) on Apr 17, 2009 at 02:38 UTC | |
by mikeraz (Friar) on Apr 17, 2009 at 00:20 UTC | |
|
Re: Case Munging
by Bloodnok (Vicar) on Apr 17, 2009 at 14:17 UTC |