¿Cuál es el comando Bash que puedo usar para convertir una cadena de mayúsculas a minúsculas y viceversa?
Gracias.
¿Cuál es el comando Bash que puedo usar para convertir una cadena de mayúsculas a minúsculas y viceversa?
Gracias.
Respuestas:
Si la cadena ya está almacenada en una variable, puede usar bash
la expansión de parámetros, específicamente ${parameter,,pattern}
(disponible desde bash 4.0), donde parameter
está el nombre de su variable y pattern
se omite:
$ string="Hello, World!"
$ echo $string
Hello, World!
$ echo ${string,,}
hello, world!
Tenga en cuenta que esto no cambia el valor de la variable, solo la salida. Para cambiar la variable, debe asignar el nuevo valor:
$ echo $string
Hello, World!
$ string=${string,,}
$ echo $string
hello, world!
La conversión de mayúsculas funciona con ${parameter^^pattern}
:
$ echo ${string^^}
HELLO, WORLD!
Esto también funciona con cadenas Unicode (al menos con las versiones actuales de bash, probablemente necesite al menos bash 4.3):
$ string='ἈΛΦΆβητος'
$ echo ${string,,}
ἀλφάβητος
$ echo ${string^^}
ἈΛΦΆΒΗΤΟΣ
Si está usando zsh
, puede usar los indicadores de expansión de parámetros ( ${(FLAGS)NAME}
disponibles desde zsh 2.5) para lograr los mismos resultados. La bash
sintaxis no funciona en zsh
1) . La bandera para minúsculas es L
; para mayúsculas es U
:
$ string="Hello, World!"
$ echo ${(L)string}
hello, world!
$ echo ${(U)string}
HELLO, WORLD!
$ echo $string
Hello, World!"
Esto también funciona con cadenas Unicode (al menos desde zsh 5.0; no probé con versiones anteriores):
$ string='ἈΛΦΆβητος'
$ echo ${(L)string}
ἀλφάβητος
$ echo ${(U)string}
ἈΛΦΆΒΗΤΟΣ
1) Aunque, viendo que zsh tenía esto por mucho más tiempo, probablemente debería ser: "la zsh
sintaxis no funciona"bash
.
${string,,}
notación solo existe para bash versión 4+. De lo contrario, se requiere una de las otras soluciones, como $(echo $string | tr '[:upper:]' '[:lower:]')
.
Hay muy pocos métodos que funcionan correctamente con Unicode:
GNU sed 4.2.2 funciona :
$ echo "Idą gęsi łąką" | sed 's/.*/\U&/'
IDĄ GĘSI ŁĄKĄ
bash 4.2.45 declarar no funciona:
$ typeset -u ucase; ucase="Idą gęsi łąką"; echo $ucase
IDą GęSI łąKą
La expansión de parámetros bash 4.2.45 no funciona:
$ str="Idą gęsi łąką"; echo ${str^^}
IDą GęSI łąKą
bash 4.3.42 declare
y trabajo de expansión de parámetros :
$ declare -u ucase
$ ucase="Idą gęsi łąką"
$ echo $ucase
IDĄ GĘSI ŁĄKĄ
$ echo ${ucase,,}
idą gęsi łąką
GNU tr 8.20 no funciona:
$ echo "Idą gęsi łąką" | tr '[:lower:]' '[:upper:]'
IDą GęSI łąKą
mawk (awk predeterminado en Ubuntu 13.10) no funciona:
$ echo "Idą gęsi łąką" | mawk '{print toupper($0)}'
IDą GęSI łąKą
gawk funciona :
$ echo "Idą gęsi łąką" | gawk '{print toupper($0)}'
IDĄ GĘSI ŁĄKĄ
Perl pure uc () no funciona:
$ echo "Idą gęsi łąką" | perl -ne 'print uc($_);'
IDą GęSI łąKą
Python 2 sin ninguna sugerencia de Unicode no funciona:
$ echo "Idą gęsi łąką" | python -c 'import sys; print sys.stdin.read().upper(),'
IDą GęSI łąKą
Python 2 cuando se le indica que trate con trabajos Unicode :
$ echo "Idą gęsi łąką" | python -c 'import sys; print sys.stdin.read().decode("utf-8").upper(),'
IDĄ GĘSI ŁĄKĄ
Python 3 funciona :
$ echo "Idą gęsi łąką" | python3 -c 'import sys; print(sys.stdin.read().upper(), end="")'
IDĄ GĘSI ŁĄKĄ
gawk
el awk predeterminado (como se muestra con update-alternatives --display awk
). ¿Estás seguro de que mawk
es el predeterminado en 13.10?
sed
s desde 1990 han apoyado la \U
opción ;-). No es una característica específica de gnu-sed. De lo contrario, gran respuesta, tantas opciones, tan poco tiempo ;-) ¡Buena suerte a todos!
uc
no funciona en Perl porque tiene que hacerlo use Encode
o use utf8
. Reescribe tu ejemplo como echo "Idą gęsi łąką" | perl -ne 'use Encode;print encode("utf-8",uc(decode("utf-8",$_)))'
y funcionará. Ver también stackoverflow.com/a/13261662/3701431
Me gustaría utilizar la interna fiesta de composición tipográfica o declarar comando para definir una variable en minúscula.
$ typeset -l lcase
$ lcase="LoWeR cAsE"
$ echo $lcase
lower case
Los caracteres se reducen cuando se establece el valor, no cuando se escribe la variable. Por lo tanto, es mejor escribir al principio del guión. Para mayúsculas puede escribir -u .
$ typeset -u ucase
$ ucase="Upper cAsE"
$ echo $ucase
UPPER CASE
Esto no es específico para bash shell, que también funciona en ksh, tal vez está en la definición de shell POSIX.
EDITAR: Mucha gente me señaló gentilmente el hecho de que la composición tipográfica ahora se considera obsoleta en bash y se reemplaza por declare . Ambos comandos son equivalentes.
$ 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.
Yo sigo usando la sintaxis de composición tipográfica mientras trabajo en un entorno heterogéneo, por lo que no tengo que reescribir mis scripts.
typeset
se considera depricated y sustituido pordeclare
Puedes hacerlo con el tr
comando.
En la terminal ( Ctrl+ Alt+ T)
Este comando:
echo 'String here' | tr "[:lower:]" "[:upper:]"
convertirá minúsculas a mayúsculas.
echo 'STRING HERE' | tr "[:upper:]" "[:lower:]"
convertirá mayúsculas a minúsculas.
Ejemplo:
El crédito va a la ciberciudad
tr A-Z a-z
también funcionará.
No es una solución de bash puro, pero puede canalizar sus cadenas perl
(como hizo Olised
):
$ echo lowercase | perl -ne 'print "\U$_"'
LOWERCASE
Y \L
tendrá el efecto contrario:
$ echo UPPERCASE | perl -ne 'print "\L$_"'
uppercase
Utilice este comando simple Para mayúsculas y minúsculas Donde 'f' es el nombre del archivo donde desea realizar la conversión.
tr "A-Z" "a-z" < f
Para minúsculas a mayúsculas
tr "a-z" "A-Z" < f