EDIT: Já que há alguma confusão sobre se vim
ou sed
deve ser usado. Eu ofereço soluções para ambos:
Vim
A seguinte substituição substitui as palavras por minúsculas, exceto a primeira letra. Palavras de uma única letra são convertidas em maiúsculas.
:%s/\<\(\k\)\(\k*\)\>/\u\L/g
\k
corresponde a caracteres alfanuméricos e _
. O amplamente utilizado \w
é equivalente a [A-Za-z0-9_]
e falhará nas letras cirílicas.
Os \<
e \>
pegam os limites de palavras e os parênteses agrupam a correspondência na primeira letra e o restante, que está sendo recuperado usando e
, respectivamente.
Para este padrão funcionar, você precisa configurar o vim para usar o UTF-8.
set encoding=utf-8
Sed
sed 's/\b\([[:alpha:]]\)\([[:alpha:]]*\)\b/\u\L/g' <inputfile>
\b
corresponde a limites de palavras em sed
, o restante é igual à versão vim
. (Testado no GNU sed, as classes de caracteres podem não ser suportadas em todas as versões sed
.)