Dado:
main_east_library
main_west_roof
main_north_roof
minor_south_roof
¿Cómo se utiliza I sed
(en concreto, no awk
, tr
, etc.) para crear:
main_east_Library
main_west_Roof
main_north_Roof
minor_south_Roof
Algo como:
$ echo "main_west_library
main_west_roof
main_north_roof
minor_south_roof" | sed 's_\3_upcase(\3)_'
Aunque eso da:
sed: -e expression #1, char 16: Invalid back reference
Respuestas:
Con GNU
sed
:Capitalizaría la tercera secuencia de letras de cada línea.
Para capitalizar cada tercera secuencia de letras en cada línea:
Para capitalizar cada tercera secuencia de letras en toda la entrada , con GNU
awk
:O con
perl
: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:
Aunque eso puede terminar incluyendo demasiados.
También tenga en cuenta que, a diferencia de GNU
sed
, Perl\u
transformará correctamente palabras comofiddle
(dondefi
hay un carácter de ligadura) aFiddle
(2 caracteresF
yi
).fuente
perl
Cuenta 2 secuencias de caracteres que terminan con guión bajo, luego pone en mayúscula el siguiente carácter.
fuente
Otra GNU
sed
:Esto supone que la línea siempre comienza con una palabra.
fuente