Si la cadena ya está almacenada en una variable, puede usar bashla expansión de parámetros, específicamente ${parameter,,pattern}(disponible desde bash 4.0), donde parameterestá el nombre de su variable y patternse omite:
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 bashsintaxis no funciona en zsh1) . La bandera para minúsculas es L; para mayúsculas es U:
La ${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:]').
Quinn Commandado
40
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Ą
En Ubuntu 13.04, tengo gawkel awk predeterminado (como se muestra con update-alternatives --display awk). ¿Estás seguro de que mawkes el predeterminado en 13.10?
kiri
seds desde 1990 han apoyado la \Uopció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!
En su ejemplo, el bolso ucno funciona en Perl porque tiene que hacerlo use Encodeo 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
Sergiy Kolodyazhnyy
20
Me gustaría utilizar la interna fiesta de composición tipográfica o declarar comando para definir una variable en minúscula.
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 .
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.
+1 Increíble, ¡nunca lo supe! por cierto algo de información extra: Miré esto en el manual y parece que typesetse considera depricated y sustituido pordeclare
Thom
1
@ Gracias, parece que bash comenzó a tener una vida lejos de sus "raíces de concha de bourne" :)
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), dondeparameter
está el nombre de su variable ypattern
se omite:Tenga en cuenta que esto no cambia el valor de la variable, solo la salida. Para cambiar la variable, debe asignar el nuevo valor:
La conversión de mayúsculas funciona con
${parameter^^pattern}
:Esto también funciona con cadenas Unicode (al menos con las versiones actuales de bash, probablemente necesite al menos bash 4.3):
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. Labash
sintaxis no funciona enzsh
1) . La bandera para minúsculas esL
; para mayúsculas esU
:Esto también funciona con cadenas Unicode (al menos desde zsh 5.0; no probé con versiones anteriores):
1) Aunque, viendo que zsh tenía esto por mucho más tiempo, probablemente debería ser: "la
zsh
sintaxis no funciona"bash
.fuente
${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 :
bash 4.2.45 declarar no funciona:
La expansión de parámetros bash 4.2.45 no funciona:
bash 4.3.42
declare
y trabajo de expansión de parámetros :GNU tr 8.20 no funciona:
mawk (awk predeterminado en Ubuntu 13.10) no funciona:
gawk funciona :
Perl pure uc () no funciona:
Python 2 sin ninguna sugerencia de Unicode no funciona:
Python 2 cuando se le indica que trate con trabajos Unicode :
Python 3 funciona :
fuente
gawk
el awk predeterminado (como se muestra conupdate-alternatives --display awk
). ¿Estás seguro de quemawk
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 hacerlouse Encode
ouse utf8
. Reescribe tu ejemplo comoecho "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/3701431Me gustaría utilizar la interna fiesta de composición tipográfica o declarar comando para definir una variable en minúscula.
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 .
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.
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.
fuente
typeset
se considera depricated y sustituido pordeclare
Puedes hacerlo con el
tr
comando.En la terminal ( Ctrl+ Alt+ T)
Este comando:
convertirá minúsculas a mayúsculas.
convertirá mayúsculas a minúsculas.
Ejemplo:
El crédito va a la ciberciudad
fuente
tr A-Z a-z
también funcionará.También puedes canalizar las cosas
sed
:Y
\L
tendrá el efecto contrario:fuente
No es una solución de bash puro, pero puede canalizar sus cadenas
perl
(como hizo Olised
):Y
\L
tendrá el efecto contrario:fuente
Utilice este comando simple Para mayúsculas y minúsculas Donde 'f' es el nombre del archivo donde desea realizar la conversión.
Para minúsculas a mayúsculas
fuente