Con GNU sed
:
sed -E 's/[[:alpha:]]+/\u&/3'
Capitalizaría la tercera secuencia de letras de cada línea.
Para capitalizar cada tercera secuencia de letras en cada línea:
sed -E 's/(([[:alpha:]]+[^[:alpha:]]+){2})([[:alpha:]]+)/\1\u\3/g'
Para capitalizar cada tercera secuencia de letras en toda la entrada , con GNU awk
:
awk -v RS='[^[:alpha:]]+' -v ORS= '
NR % 3 == 0 {$0=toupper(substr($0,1,1)) substr($0,2)}
{print $0 RT}'
O con perl
:
perl -Mopen=locale -pe 's/\p{alpha}+/++$n % 3 == 0 ? "\u$&" : "$&"/ge'
Si bien la [[:alpha:]]
clase de caracteres puede ser un poco aleatoria en algunos sistemas (por ejemplo, en sistemas GNU, eso incluye muchos números con la exclusión de los árabes (0123456789)), Perl \p{...}
se basa en propiedades de caracteres Unicode. Por lo tanto \p{alpha}
, incluirán letras en todos los alfabetos y también caracteres alfabéticos que no sean letras.
Sin embargo, no incluirá la combinación de signos diacríticos, lo que significa que palabras como Stéphane
se considerarían como dos palabras separadas.
Por lo tanto, es posible que desee en su lugar:
perl -Mopen=locale -pe 's/[\p{alpha}\p{mark}]+/++$n % 3 == 0 ? "\u$&" : "$&"/ge'
Aunque eso puede terminar incluyendo demasiados.
También tenga en cuenta que, a diferencia de GNU sed
, Perl \u
transformará correctamente palabras como fiddle
(donde fi
hay un carácter de ligadura) a Fiddle
(2 caracteres F
y i
).