Commande permettant de convertir une chaîne en majuscule en minuscule?

44

Quelle est la commande Bash que je peux utiliser pour convertir une chaîne en majuscule en minuscule et vice-versa?

Merci.

    
posée rɑːdʒɑ 28.11.2013 - 14:03
la source

7 réponses

55

Si la chaîne est déjà stockée dans une variable, vous pouvez utiliser le développement des paramètres de bash , 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 uniquement la sortie. Pour changer la variable, vous devez attribuer la nouvelle valeur:

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

La conversion en majuscule fonctionne avec ${parameter^^pattern} :

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

Ceci fonctionne aussi avec les chaînes Unicode (au moins avec les versions actuelles de bash, nécessite probablement au moins bash 4.3):

$ string='ἈΛΦΆβητος'
$ echo ${string,,}
ἀλφάβητος
$ echo ${string^^}
ἈΛΦΆΒΗΤΟΣ

Si vous utilisez zsh , vous pouvez utiliser drapeaux d'expansion de paramètres ( ${(FLAGS)NAME} ; disponible depuis zsh 2.5) pour obtenir les mêmes résultats. La syntaxe bash ne fonctionne pas dans zsh 1) . Le drapeau pour les minuscules est L ; pour les majuscules, il s'agit de U :

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

Cela fonctionne aussi avec les chaînes Unicode (au moins depuis zsh 5.0; je n'ai pas essayé avec les versions précédentes):

$ string='ἈΛΦΆβητος'
$ echo ${(L)string} 
ἀλφάβητος
$ echo ${(U)string}  
ἈΛΦΆΒΗΤΟΣ

1) Bien que, vu que zsh l’ait depuis bien plus longtemps, il devrait probablement être: "la syntaxe zsh ne fonctionne pas dans bash .

    
réponse donnée Adaephon 28.11.2013 - 14:18
la source
38

Très peu de méthodes fonctionnent correctement avec Unicode:

GNU sed 4.2.2 fonctionne :

$ echo "Idą gęsi łąką" | sed 's/.*/\U&/'
IDĄ GĘSI ŁĄKĄ

bash 4.2.45 déclare que pas ne fonctionne pas:

$ typeset -u ucase; ucase="Idą gęsi łąką"; echo $ucase
IDą GęSI łąKą

L’expansion des paramètres de bash 4.2.45 ne fonctionne pas:

$ str="Idą gęsi łąką"; echo ${str^^}
IDą GęSI łąKą

bash 4.3.42 declare et expansion des paramètres fonctionnent :

$ declare -u ucase
$ ucase="Idą gęsi łąką"
$ echo $ucase
IDĄ GĘSI ŁĄKĄ
$ echo ${ucase,,}
idą gęsi łąką

GNU tr 8.20 ne fonctionne pas :

$ echo "Idą gęsi łąką" | tr '[:lower:]' '[:upper:]'
IDą GęSI łąKą

mawk (awk par défaut dans Ubuntu 13.10) ne fonctionne pas :

$ echo "Idą gęsi łąką" | mawk '{print toupper($0)}'
IDą GęSI łąKą

gawk fonctionne :

$ echo "Idą gęsi łąką" | gawk '{print toupper($0)}'
IDĄ GĘSI ŁĄKĄ

Perl pure uc () ne fonctionne pas :

$ echo "Idą gęsi łąką" | perl -ne 'print uc($_);'
IDą GęSI łąKą

Python 2 sans conseils Unicode ne fonctionne pas :

$ echo "Idą gęsi łąką" | python -c 'import sys; print sys.stdin.read().upper(),'
IDą GęSI łąKą

Python 2 lorsqu'il est chargé de traiter Unicode fonctionne :

$ echo "Idą gęsi łąką" | python -c 'import sys; print sys.stdin.read().decode("utf-8").upper(),'
IDĄ GĘSI ŁĄKĄ

Python 3 fonctionne :

$ echo "Idą gęsi łąką" | python3 -c 'import sys; print(sys.stdin.read().upper(), end="")'
IDĄ GĘSI ŁĄKĄ
    
réponse donnée Michał Šrajer 29.11.2013 - 16:37
la source
20

J'utiliserais la commande typographie ou declare de bash internal pour définir une variable minuscule.

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

Les caractères sont réduits lorsque la valeur est définie, pas lorsque vous tapez la variable. Il est donc préférable de composer au début du script. En majuscule, vous pouvez composer -u .

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

Ceci n'est pas spécifique au shell bash, cela fonctionne aussi sur ksh, peut-être dans la définition du shell POSIX.

EDIT: De nombreuses personnes m'ont gentiment fait remarquer que la composition est désormais considérée comme obsolète au moment de la publication 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.

Moi-même, j'utilise toujours la syntaxe de composition en travaillant dans un environnement hétérogène. Je ne dois donc pas réécrire mes scripts.

    
réponse donnée Emmanuel 28.11.2013 - 16:25
la source
16

Vous pouvez le faire avec la commande tr .

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.

Exemple:

Lecréditvaàla cybercity

.     
réponse donnée Ten-Coin 28.11.2013 - 14:12
la source
9

Vous pouvez également transférer des éléments via sed :

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

Et \L aura l'effet inverse:

$ echo UPPERCASE | sed 's/.*/\L&/'
uppercase
    
réponse donnée Oli 28.11.2013 - 14:26
la source
1

Ce n'est pas une solution pure bash, mais vous pouvez diriger vos chaînes via perl (comme Oli l'a fait avec sed ):

$ echo lowercase | perl -ne 'print "\U$_"'
LOWERCASE

Et \L aura l'effet inverse:

$ echo UPPERCASE | perl -ne 'print "\L$_"'
uppercase
    
réponse donnée Sylvain Pineau 22.09.2014 - 14:25
la source
-1

Utilisez cette commande simple Pour les majuscules aux minuscules Où 'f' est le nom du fichier où vous souhaitez effectuer la conversion.

tr "A-Z" "a-z" < f

Pour les minuscules aux majuscules

tr "a-z" "A-Z" < f
    
réponse donnée jack 14.10.2014 - 02:25
la source

Lire d'autres questions sur les étiquettes