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"