Avec GNU sed:
sed -E 's/[[:alpha:]]+/\u&/3'
Serait en majuscule la troisième séquence de lettres de chaque ligne.
Pour mettre en majuscule une troisième séquence de lettres sur chaque ligne:
sed -E 's/(([[:alpha:]]+[^[:alpha:]]+){2})([[:alpha:]]+)/\1\u\3/g'
Pour mettre une troisième séquence de lettres en majuscule dans l'entrée entière , avec GNU awk:
awk -v RS='[^[:alpha:]]+' -v ORS= '
NR % 3 == 0 {$0=toupper(substr($0,1,1)) substr($0,2)}
{print $0 RT}'
Ou avec perl:
perl -Mopen=locale -pe 's/\p{alpha}+/++$n % 3 == 0 ? "\u$&" : "$&"/ge'
Alors que la [[:alpha:]]classe de caractères peut être un peu aléatoire sur certains systèmes (par exemple sur les systèmes GNU, qui comprend de nombreux chiffres à l'exclusion des arabes (0123456789)), Perl \p{...}est basé sur les propriétés des caractères Unicode. Ainsi, ceux- \p{alpha}ci incluront des lettres dans tous les alphabets et également des caractères alphabétiques non-lettres.
Cela n'inclura pas la combinaison de signes diacritiques, ce qui signifie que des mots comme Stéphaneseraient considérés comme deux mots distincts.
Vous voudrez peut-être plutôt:
perl -Mopen=locale -pe 's/[\p{alpha}\p{mark}]+/++$n % 3 == 0 ? "\u$&" : "$&"/ge'
Bien que cela puisse finir par en inclure trop.
Notez également que contrairement à GNU sed, Perl \utransformera correctement des mots comme fiddle(où fiest un caractère de ligature) en Fiddle(2 caractères Fet i).