I\'d like to change the following patterns:
getFoo_Bar
to:
getFoo_bar
(note the lower b)
Knowing
Somewhat shorter:
echo getFoo_Bar | sed 's/_\(.\)/_\L\1/'
To change getFoo_Bar to getFoo_bar using sed :
echo "getFoo_Bar" | sed 's/^\(.\{7\}\)\(.\)\(.*\)$/\1\l\2\3/'
The upper and lowercase letters are handled by :
\U
Makes all text to the right uppercase.\u
makes only the first character to the right uppercase.\L
Makes all text to the right lowercase.\l
Makes only the first character to the right lower case. (Note its a lowercase letter L)The example is just one method for pattern matching, just based on modifying a single chunk of text. Using the example, getFoo_BAr transforms to getFoo_bAr, note the A was not altered.
Shortest I can come up with:
echo getFoo_Bar | sed 's/_./\L&/'
echo getFoo_Bar | sed 's/[Bb]/\L&/g'
If you want to write everything in lowercase just after underscore, than this would work for you:
echo getFoo_Bar | gawk -F_ '{print tolower($2)}'
You can use perl for this one:
perl -pe 's/(get[A-Z][A-Za-z0-9]*)_([A-Z])/\1_\l\2/'
The \l is the trick here.
sed doesn't do upper/lowercase on matched groups.