Uppercasing First Letter of Words Using SED
Solution 1:
This line should do it:
sed -e "s/\b\(.\)/\u\1/g"
Solution 2:
Using awk
:
awk '{for(i=1;i<=NF;i++){ $i=toupper(substr($i,1,1)) substr($i,2) }}1' file
The output would be:
Trouble Me
Gold Rush Brides
Solution 3:
Use the following sed command for capitalizing the first letter of the each word.
echo -e "Trouble me \nGold rush brides" | sed -r 's/\<./\U&/g'
output
Trouble Me
Gold Rush Brides
The -r
switch tells sed
to use extended regular expressions. The instructions to sed
then tell it to "search and replace" (the s
at the beginning) the pattern \<.
with the pattern \U&
globally, i.e. all instances in every line (that's the g
modifier at the end). The pattern we're searching for is \<.
which is looking for a word boundary (\<
) followed by any character (.
). The replacement pattern is \U&
, where \U
instructs sed
to make the following text uppercase and &
is a synonym for \0
, which refers to "everything that was matched". In this case, "everything that was matched" is just what the .
matched, as word boundaries are not included in the matches (instead, they are anchors). What .
matched is just one character, so this is what is upper cased.
Solution 4:
I had apostrophes so, working off the first solution...
mike@mike-laptop3:~$ echo "BEST WESTERN PLUS BOB's INN" | tr "[A-Z]" "[a-z]" | sed -e "s/\b\(.\)/\u\1/g"
Best Western Plus Bob'S Inn
mike@mike-laptop3:~$ echo "BEST WESTERN PLUS BOB's INN" | tr "[A-Z]" "[a-z]" | sed "s/\( \|^\)\(.\)/\1\u\2/g"
Best Western Plus Bob's Inn
Solution 5:
Another shorter version with sed:
sed -e "s/\b./\u\0/g"