Dado:
main_east_library
main_west_roof
main_north_roof
minor_south_roof
Como posso usado sed
(especificamente, não awk
, tr
, etc.) para criar:
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)_'
Embora isso dê:
sed: -e expression #1, char 16: Invalid back reference
Respostas:
Com o GNU
sed
: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:
Para capitalizar cada terceira sequência de letras em toda a entrada , com o GNU
awk
:Ou com
perl
: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:
Embora isso possa acabar incluindo muitos.
Observe também que, ao contrário do GNU
sed
, o Perl's\u
transformará corretamente palavras comofiddle
(ondefi
há um caractere de ligadura) emFiddle
(2 caracteresF
ei
).fonte
perl
Ele conta 2 sequências de caracteres que terminam com sublinhado e, em maiúsculas, o próximo caractere.
fonte
Outro GNU
sed
:Isso pressupõe que a linha sempre comece com uma palavra.
fonte