Ma question est comment puis-je convertir tout le text de majuscules en minuscules et vice versa? C'est pour changer les cas de toutes les lettres. Cela doit être fait avec un rlocation sed
quelque sorte.
Voici une façon simple de sed
:
$ echo qWeRtY | sed -e 'y/abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/' QwErTy
ou un path plus court (avec GNU sed
):
$ echo qWeRtY | sed -E 's/([[:lower:]])|([[:upper:]])/\U\1\L\2/g' QwErTy
si vous pouvez utiliser d'autres outils, comme:
perl
:
$ echo qWeRtY | perl -pe 'y/[az][AZ]/[AZ][az]/' QwErTy
POSIXly, cela ne peut pas être fait avec sed
sauf en fournissant l'set complet des lettres que vous voulez translittérer comme @cuonglm l'a montré .
Cela pourrait être fait avec tr
cependant, et c'est ce que tr
est pour (translittéré):
tr '[:lower:][:upper:]' '[:upper:][:lower:]'
Cependant, sous Linux, il y a des limites. Parmi les implémentations de 3 tr
couramment trouvées sur les systèmes basés sur Linux:
tr
, qui ne fonctionne que pour les jeux de caractères à un seul octet. Par exemple, sur Stéphane Chazelas
dans les environnements UTF-8, cela donne sTéPHANE cHAZELAS
au lieu de sTÉPHANE cHAZELAS
. C'est une limitation connue de GNU tr
. tr
de la barre d'outils pasortingmoniale, ça ne marche pas (vous obtenez stéphane chazelas
). tr
fera. Sur FreeBSD qui fonctionne bien cependant. Vous vous attendez à ce qu'il fonctionne correctement dans les systèmes Unix certifiés.
Le shell bash
a un opérateur dédié pour cela:
in=AbCdE out=${in~~}
Avec zsh -o extendedglob
:
out=${in//(#b)(([[:lower:]])|([[:upper:]]))/${(U)match[2]}${(L)match[3]}}
en utilisant awk
:
awk '{print tolower($0)}' file.txt > file.txt
Bien que cela ait les mêmes limites déjà mentionnées que la solution proposée par Stéphane Chazelas, c'est une autre façon de le faire:
{ echo QWERTYqwerty | dd conv=lcase echo QWERTYqwerty | dd conv=ucase } 2>/dev/null
qwertyqwerty QWERTYQWERTY
Je jette stderr
dans /dev/null
car dd
fournit également des statistics de toutes ses opérations sur le descripteur de 2
files. Cela peut être utile selon ce que vous faites, mais pas pour cette démonstration. Toutes les autres choses que vous pouvez faire avec dd
s'applique toujours, par exemple:
echo QWERTYqwerty | dd bs=1 cbs=6 conv=unblock,ucase 2>/dev/null
QWERTY QWERTY
Gardez la chose simple simple. Le filter conçu pour traduire les caractères est tr
.
echo 1ude1UDE | tr [:upper:][:lower:] [:lower:][:upper:]