Com o GNU sed :
sed -E 's/[[:alpha:]]+/\u&/3'
Seria capitalizar a terceira seqüência de letras de cada linha.
Para capitalizar cada terceira seqüência de letras em cada linha:
sed -E 's/(([[:alpha:]]+[^[:alpha:]]+){2})([[:alpha:]]+)/\u/g'
Para capitalizar cada terceira seqüência de letras em toda a entrada , com o GNU awk :
awk -v RS='[^[:alpha:]]+' -v ORS= '
NR % 3 == 0 {$0=toupper(substr($0,1,1)) substr($0,2)}
{print $0 RT}'
Ou com perl :
perl -Mopen=locale -pe 's/\p{alpha}+/++$n % 3 == 0 ? "\u$&" : "$&"/ge'
Enquanto a classe de caractere [[:alpha:]] pode ser um pouco aleatória em alguns sistemas (por exemplo, em sistemas GNU, isso inclui muitos numerais com a exclusão dos arábicos (0123456789)), \p{...} de Perl é baseado em caracteres Unicode propriedades. Então, esses \p{alpha} incluirão letras em todos os alfabetos e também caracteres alfabéticos não alfabéticos.
Não incluirá combinação de diacríticos, o que significa que palavras como Stéphane seriam consideradas como duas palavras separadas.
Então você pode querer:
perl -Mopen=locale -pe 's/[\p{alpha}\p{mark}]+/++$n % 3 == 0 ? "\u$&" : "$&"/ge'
Embora isso possa acabar, incluindo muitos.
Observe também que, contrariamente ao GNU sed , \u do Perl irá transformar corretamente palavras como fiddle (onde fi é um caractere de ligadura) para Fiddle (2 caracteres F e i ) .