Capitalize strings em sed ou awk

Eu tenho três tipos de seqüências de caracteres que eu gostaria de capitalizar em um script bash. Eu percebi sed / awk seria minha melhor aposta, mas não tenho certeza. Qual é a melhor maneira de atender aos seguintes requisitos?

única palavra
por exemplo.taco -> Taco

várias palavras separadas por hífens
por exemplo.my-fish-tacos -> My-Fish-Tacos

várias palavras separadas por sublinhados
por exemplo.my_fish_tacos -> My_Fish_Tacos

questionAnswers(6)

yourAnswerToTheQuestion