507 votos

Conversión de cadena a caso inferior en Bash shell scripting

¿Hay alguna manera de Bash shell scripting para que pueda convertir una cadena en minúsculas cadena?

Por ejemplo,

if $a = "Hi all"

Quiero convertir a

$a = "hi all"

884voto

ghostdog74 Puntos 86060

El de varias maneras:

tr

$ echo $a | tr '[:upper:]' '[:lower:]'
hi all

AWK

$ echo $a | awk '{print tolower($0)}'
hi all

Bash 4.0

$ echo ${a,,}
hi all

Perl

$ echo $a | perl -ne 'print lc'
hi all

Bash

lc(){
    case "$1" in
        [A-Z])
        n=$(printf "%d" "'$1")
        n=$((n+32))
        printf \\$(printf "%o" $n)
    esac
}
word="ABX"
for((i=0;i<${#word};i++))
do
    ch=${word:$i:1}
    lc $ch
done

201voto

Dennis Williamson Puntos 105818

En Bash 4:

A minúsculas

$ string="A FEW WORDS"
$ echo ${string,}
a FEW WORDS
$ echo ${string,,}
a few words
$ echo ${string,,[AEIUO]}
a FeW WoRDS

$ string="A Few Words"
$ declare -l string
$ string=$string; echo $string
a few words

A mayúsculas

$ string="a few words"
$ echo ${string^}
A few words
$ echo ${string^^}
A FEW WORDS
$ echo ${string^^[aeiou]}
A fEw wOrds

$ string="A Few Words"
$ declare -u string
$ string=$string; echo $string
A FEW WORDS

Alternar (de indocumentados)

$ string="A Few Words"
$ echo ${string~~}
a fEW wORDS
$ string="A FEW WORDS"
$ echo ${string~}
a fEW wORDS
$ string="a few words"
$ echo ${string~}
A Few Words

Capitalizar (de indocumentados)

$ string="a few words"
$ declare -c string
$ string=$string
$ echo $string
A few words

Título:

$ string="a few words"
$ string=($string)
$ string=${string[@]^}
$ echo $string
A Few Words

$ declare -c string
$ string=(a few words)
$ echo ${string[@]}
A Few Words

Para desactivar una declare atributo, utilice +. Por ejemplo, declare +c string. Esto afecta a la cesión subsiguiente y no el valor actual.

Edición:

Agregó que "alternar primer carácter de la palabra" (${var~}) como sugerido por ghostdog74.

87voto

shuvalov Puntos 1609
echo "Hi All" | tr "[:upper:]" "[:lower:]"

46voto

tr:

a="$(tr [A-Z] [a-z] <<< "$a")"

AWK:

{ print tolower($0) }

sed:

y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/

17voto

Scott Smedley Puntos 404

En zsh:

echo $a:u

Me encanta zsh!

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X