Forum Astuces.divers [Terminal] mettre le premier caractère d'un mot en majuscule et les autres caractères en minuscule en shell

Posté par  .
Étiquettes : aucune
0
26
fév.
2005
source : expansion des paramètres (man sh)
#!/bin/sh

a=$1

# A est la sous chaine de $a qui commence au 0ieme caractere 
# et qui a une longueur de 1 caractere :
A=${a:0:1}
# mettre en majuscule cette premiere lettre
B=`echo $A |tr -s a-z A-Z`

# C est la sous chaine de $a qui commence au caractere d'indice 1
# c'est à dire $a moins son premier caractere.
C=${a:1}
# mettre en minuscule ces caracteres
D=`echo $C |tr -s A-Z a-z`

echo $B$D
  • # Plus rapide

    Posté par  . Évalué à 1.

    Racourcis du bash en mode emacs (par defaut) :

    ESCAPE suivit de "l" (L minuscule) => lowercase le mot suivant
    ESCAPE suivit de "u" => uppercase le mot suivant

    Et pour le cas de dugenoux :
    ESCAPE suivit de "c" => uppercase la première lettre et lowercase toutes les autres du mot suivant
    • [^] # Re: Plus rapide

      Posté par  . Évalué à 3.

      Je pense que son tips est plus orienté "scripting shell"
      tandis que le tien est plus orienté "interactivité"
  • # bash != sh...

    Posté par  (site web personnel) . Évalué à 1.

    Bonjour,

    La méthode d'extraction de sous-chaîne d'une variable que vous proposez est spécifique à bash. Elle ne fonctionnera pas avec n'importe quel /bin/sh.
  • # À l'essentiel

    Posté par  (site web personnel) . Évalué à 1.

    De facon plus synthétique (l'esprit reste exactement le même):
    echo "`echo ${1:0:1}|tr a-z A-Z`${1:1}"
  • # cela fonctionne egalement sur les sh POSIX

    Posté par  . Évalué à 1.

    il suffit de remplacer l'extraction du premier caractere de la chaine et du reste de la chaine par leurs equivalents POSIX a savoir:
    "${X%"${X#?}"}"
    et
    "${X#?}"
  • # Regexp powa

    Posté par  . Évalué à 0.

    Il y a ca aussi en utilisant les marqueurs de debut et fin de mot


    $ echo grEu | sed -e 's/\(\<[a-zA-Z]\)\([a-zA-Z]*\>\)/\u\1\L\2/g'
    Greu


    Noter la difference entre \u (un caractere) et \L (plusieurs caracteres)
  • # Perl est parfois plus lisible

    Posté par  . Évalué à 1.

    print ucfirst lc $ARGV[0];

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.