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
) .