Com o GNU sed
:
sed -E 's/[[:alpha:]]+/\u&/3'
Colocaria em maiúscula a terceira sequência de letras de cada linha.
Para colocar em maiúscula cada terceira sequência de letras em cada linha:
sed -E 's/(([[:alpha:]]+[^[:alpha:]]+){2})([[:alpha:]]+)/\1\u\3/g'
Para capitalizar cada terceira sequê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'
Embora a [[:alpha:]]
classe de caracteres possa ser um pouco aleatória em alguns sistemas (por exemplo, em sistemas GNU, que inclui muitos números com exclusão dos números árabes (0123456789)), o Perl \p{...}
é baseado nas propriedades de caracteres Unicode. Portanto, eles \p{alpha}
incluirão letras em todos os alfabetos e também caracteres alfabéticos que não sejam letras.
Não incluirá a combinação de diacríticos, o que significa que palavras como Stéphane
seriam consideradas 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, ao contrário do GNU sed
, o Perl's \u
transformará corretamente palavras como fiddle
(onde fi
há um caractere de ligadura) em Fiddle
(2 caracteres F
e i
).