Quelle est la commande Bash que je peux utiliser pour convertir une chaîne en majuscule en minuscule et vice-versa?
Je vous remercie.
Quelle est la commande Bash que je peux utiliser pour convertir une chaîne en majuscule en minuscule et vice-versa?
Je vous remercie.
Réponses:
Si la chaîne est déjà stockée dans une variable, vous pouvez utiliser bash
le développement de paramètres, spécifiquement ${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 change 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!
Cela 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 les drapeaux d’expansion de paramètres ( ${(FLAGS)NAME}
disponibles depuis zsh 2.5) pour obtenir les mêmes résultats. La bash
syntaxe ne fonctionne pas dans zsh
1) . Le drapeau 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 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 beaucoup plus longtemps, il devrait probablement être: "la zsh
syntaxe ne fonctionne pas dansbash
.
${string,,}
notation n'existe que pour bash version 4+. Sinon, une des autres solutions est requise, telle que $(echo $string | tr '[:upper:]' '[:lower:]')
.
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 declare ne fonctionne pas :
$ typeset -u ucase; ucase="Idą gęsi łąką"; echo $ucase
IDą GęSI łąKą
L’extension du paramètre bash 4.2.45 ne fonctionne pas :
$ str="Idą gęsi łąką"; echo ${str^^}
IDą GęSI łąKą
bash 4.3.42 declare
et travaux d’ extension des paramètres :
$ 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 indication 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 demandé de traiter avec 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Ą
gawk
Awk par défaut (comme indiqué avec update-alternatives --display awk
). Êtes-vous sûr que mawk
la valeur par défaut est 13.10?
sed
s depuis 1990 ont soutenu l’ \U
option ;-). Pas une caractéristique spécifique de Gnu-sed. Sinon, bonne réponse, tellement d'options, donc peu de temps ;-) Bonne chance à tous!
uc
ne fonctionne pas en Perl car vous devez le faire use Encode
ou use utf8
. Réécrivez votre exemple au fur echo "Idą gęsi łąką" | perl -ne 'use Encode;print encode("utf-8",uc(decode("utf-8",$_)))'
et à mesure et cela fonctionnera. Voir aussi stackoverflow.com/a/13261662/3701431
J'utiliserais la commande interne typet ou declare de bash 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 composez 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
Ce n'est pas spécifique au shell bash, cela fonctionne aussi sur ksh, peut-être dans la définition du shell POSIX.
EDIT: Beaucoup de gens m'ont gentiment pointé le fait que la composition est maintenant considérée comme obsolète sur bash et remplacée par declare . 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.
J'utilise moi-même toujours la syntaxe de composition en travaillant dans un environnement hétérogène, je ne dois donc pas réécrire mes scripts.
typeset
est considéré comme depricated et remplacé pardeclare
Vous pouvez le faire avec la tr
commande.
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:
Le crédit va à la cybercité
tr A-Z a-z
cela fonctionnera aussi.
Ce n'est pas une solution pure bash, mais vous pouvez faire passer vos chaînes 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
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 minuscule à majuscule
tr "a-z" "A-Z" < f