50 votes

Commande pour convertir une chaîne de caractères en majuscules en minuscules ?

Quelle est la commande Bash que je peux utiliser pour convertir une chaîne de caractères en majuscules en minuscules et vice-versa ?

Nous vous remercions.

63voto

Adaephon Points 4529

Si la chaîne est déjà stockée dans une variable, vous pouvez utiliser bash L'expansion des paramètres de l'entreprise, en particulier ${parameter,,pattern} (disponible depuis bash 4.0), où parameter est le nom de votre variable et pattern est omis :

$ string="Hello, World!"
$ echo $string
Hello, World!
$ echo ${string,,}
hello, world!

Notez que cela ne modifie pas la valeur de la variable, mais seulement la sortie. Pour modifier la variable, vous devez lui attribuer la nouvelle valeur :

$ echo $string
Hello, World!
$ string=${string,,}
$ echo $string
hello, world!

La conversion des majuscules fonctionne avec ${parameter^^pattern} :

$ echo ${string^^}
HELLO, WORLD!

Cela fonctionne également avec les chaînes Unicode (au moins avec les versions actuelles de bash, il faut probablement au moins bash 4.3) :

$ string=''
$ echo ${string,,}

$ echo ${string^^}

Si vous utilisez zsh vous pouvez utiliser Drapeaux d'expansion des paramètres ( ${(FLAGS)NAME} (disponible depuis zsh 2.5) pour obtenir les mêmes résultats. Les bash ne fonctionne pas dans les zsh 1) . L'indicateur pour les minuscules est L ; pour les majuscules, c'est U :

$ string="Hello, World!"
$ echo ${(L)string}
hello, world!
$ echo ${(U)string}
HELLO, WORLD!
$ echo $string
Hello, World!"

Cela fonctionne également avec les chaînes Unicode (au moins depuis zsh 5.0 ; je n'ai pas essayé avec les versions antérieures) :

$ string=''
$ echo ${(L)string} 

$ echo ${(U)string}  


1) Bien que, vu que zsh l'avait depuis bien plus longtemps, il devrait probablement l'être : "le zsh ne fonctionne pas dans les bash .

40voto

Guest User Points 61

Il existe très peu de méthodes qui fonctionnent correctement avec Unicode :

GNU sed 4.2.2 travaux :

$ echo "Id gsi k" | sed 's/.*/\U&/'
ID GSI K

bash 4.2.45 déclare que no travail :

$ typeset -u ucase; ucase="Id gsi k"; echo $ucase
ID GSI K

L'expansion des paramètres de bash 4.2.45 fait no travail :

$ str="Id gsi k"; echo ${str^^}
ID GSI K

bash 4.3.42 declare et l'expansion des paramètres travail :

$ declare -u ucase
$ ucase="Id gsi k"
$ echo $ucase
ID GSI K
$ echo ${ucase,,}
id gsi k

GNU tr 8.20 fait no travail :

$ echo "Id gsi k" | tr '[:lower:]' '[:upper:]'
ID GSI K

mawk (awk par défaut dans Ubuntu 13.10) fait no travail :

$ echo "Id gsi k" | mawk '{print toupper($0)}'
ID GSI K

s'étonner travaux :

$ echo "Id gsi k" | gawk '{print toupper($0)}'
ID GSI K

Perl pure uc() fait no travail :

$ echo "Id gsi k" | perl -ne 'print uc($_);'
ID GSI K

Python 2 sans aucune indication d'Unicode le fait no travail :

$ echo "Id gsi k" | python -c 'import sys; print sys.stdin.read().upper(),'
ID GSI K

Python 2 lorsqu'on lui demande de gérer l'Unicode travaux :

$ echo "Id gsi k" | python -c 'import sys; print sys.stdin.read().decode("utf-8").upper(),'
ID GSI K

Python 3 travaux :

$ echo "Id gsi k" | python3 -c 'import sys; print(sys.stdin.read().upper(), end="")'
ID GSI K

21voto

Emmanuel Points 1243

J'utiliserais le système interne bash composer o déclarer pour définir une variable en minuscules.

$ typeset -l lcase
$ lcase="LoWeR cAsE"
$ echo $lcase
lower case

Les caractères sont abaissés lorsque la valeur est définie, et non lorsque vous saisissez la variable. Il est donc préférable de saisir la variable au début du script. Pour les majuscules, vous pouvez typographie -u .

$ typeset -u ucase
$ ucase="Upper cAsE"
$ echo $ucase
UPPER CASE

Ce n'est pas spécifique à bash Shell, cela fonctionne aussi sur ksh, peut-être que c'est dans la définition de POSIX Shell.

EDIT : Plusieurs personnes m'ont gentiment fait remarquer que composer est désormais considérée comme obsolète sur bash et remplacée par déclarer . Les deux commandes sont équivalentes.

$ help typeset
typeset: typeset [-aAfFgilrtux] [-p] name[=value] ...
    Set variable values and attributes.

    Obsolete.  See `help declare'.

$ help declare
declare: declare [-aAfFgilrtux] [-p] [name[=value] ...]
    Set variable values and attributes.

Pour ma part, j'utilise toujours la syntaxe typée car je travaille dans un environnement hétérogène, ce qui me permet de ne pas réécrire mes scripts.

18voto

Zian Choy Points 1510

Vous pouvez le faire à l'aide de la fonction tr commandement.

Dans le terminal ( Ctrl + Alt + T )

Cette commande :

echo 'String here' | tr "[:lower:]" "[:upper:]"

convertira les minuscules en majuscules.

echo 'STRING HERE' | tr "[:upper:]" "[:lower:]"

convertira les majuscules en minuscules.

Ejemplo:

enter image description here

Le mérite en revient à cybercité

10voto

Mufaka Points 54

Vous pouvez faire passer des choses par des tuyaux sed aussi :

$ echo lowercase | sed 's/.*/\U&/'
LOWERCASE

Et \L aura l'effet inverse :

$ echo UPPERCASE | sed 's/.*/\L&/'
uppercase

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X