Donné:
main_east_library
main_west_roof
main_north_roof
minor_south_roof
Comment puis - je utiliser sed
( en particulier, non awk
, tr
etc.) pour créer:
main_east_Library
main_west_Roof
main_north_Roof
minor_south_Roof
Quelque chose comme:
$ echo "main_west_library
main_west_roof
main_north_roof
minor_south_roof" | sed 's_\3_upcase(\3)_'
Bien que cela donne:
sed: -e expression #1, char 16: Invalid back reference
Réponses:
Avec GNU
sed
: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:
Pour mettre une troisième séquence de lettres en majuscule dans l'entrée entière , avec GNU
awk
:Ou avec
perl
: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:
Bien que cela puisse finir par en inclure trop.
Notez également que contrairement à GNU
sed
, Perl\u
transformera correctement des mots commefiddle
(oùfi
est un caractère de ligature) enFiddle
(2 caractèresF
eti
).la source
perl
Il compte 2 séquences de caractères se terminant par un trait de soulignement, puis met en majuscule le caractère suivant.
la source
Un autre GNU
sed
:Cela suppose que la ligne commence toujours par un mot.
la source