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éphane
seraient 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 \u
transformera correctement des mots comme fiddle
(où fi
est un caractère de ligature) en Fiddle
(2 caractères F
et i
).