Pertanyaan Bagaimana cara mengubah string ke huruf kecil di Bash?


Apakah ada jalan masuk  untuk mengubah string menjadi string huruf kecil?

Misalnya, jika saya memiliki:

a="Hi all"

Saya ingin mengonversinya menjadi:

"hi all"

913
2018-02-15 07:02


asal


Jawaban:


Ada berbagai cara:

tr

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

AWK

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

Bash 4.0

$ echo "${a,,}"
hi all

sed

$ echo "$a" | sed -e 's/\(.*\)/\L\1/'
hi all
# this also works:
$ sed -e 's/\(.*\)/\L\1/' <<< "$a"
hi all

Perl

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

Pesta

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

1581
2018-02-15 07:43



Di Bash 4:

Untuk huruf kecil

$ 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

Untuk huruf besar

$ 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

Toggle (tidak terdokumentasi, tetapi dapat dikonfigurasi pada waktu kompilasi)

$ 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

Bermodalkan (tidak terdokumentasi, tetapi dapat dikonfigurasi pada waktu kompilasi)

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

Kapitalisasi judul:

$ 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

$ string="a FeW WOrdS"
$ string=${string,,}
$ string=${string~}
$ echo "$string"
A few words

Untuk mematikan a declare atribut, gunakan +. Sebagai contoh, declare +c string. Ini mempengaruhi tugas berikutnya dan bukan nilai saat ini.

Itu declare Pilihan mengubah atribut dari variabel, tetapi bukan isi. Penugasan ulang dalam contoh saya memperbarui konten untuk menunjukkan perubahan.

Edit:

Ditambahkan "alihkan karakter pertama dengan kata" (${var~}) seperti yang disarankan oleh ghostdog74.

Edit: Perilaku tilde yang dikoreksi untuk mencocokkan Bash 4.3.


350
2018-02-15 10:31



echo "Hi All" | tr "[:upper:]" "[:lower:]"

108
2018-02-15 07:13



tr:

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

AWK:

{ print tolower($0) }

sed:

y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/

70
2018-02-15 07:03



Saya tahu ini adalah posting yang lama tetapi saya membuat jawaban ini untuk situs lain jadi saya pikir saya akan mempostingnya di sini:

UPPER -> lebih rendah: gunakan python:

b=`echo "print '$a'.lower()" | python`

Atau Ruby:

b=`echo "print '$a'.downcase" | ruby`

Atau Perl (mungkin favorit saya):

b=`perl -e "print lc('$a');"`

Atau PHP:

b=`php -r "print strtolower('$a');"`

Atau Awk:

b=`echo "$a" | awk '{ print tolower($1) }'`

Atau Sed:

b=`echo "$a" | sed 's/./\L&/g'`

Atau Bash 4:

b=${a,,}

Atau NodeJS jika Anda memilikinya (dan sedikit gila ...):

b=`echo "console.log('$a'.toLowerCase());" | node`

Anda juga bisa menggunakan dd (tapi saya tidak mau!):

b=`echo "$a" | dd  conv=lcase 2> /dev/null`

lebih rendah -> UPPER:

gunakan python:

b=`echo "print '$a'.upper()" | python`

Atau Ruby:

b=`echo "print '$a'.upcase" | ruby`

Atau Perl (mungkin favorit saya):

b=`perl -e "print uc('$a');"`

Atau PHP:

b=`php -r "print strtoupper('$a');"`

Atau Awk:

b=`echo "$a" | awk '{ print toupper($1) }'`

Atau Sed:

b=`echo "$a" | sed 's/./\U&/g'`

Atau Bash 4:

b=${a^^}

Atau NodeJS jika Anda memilikinya (dan sedikit gila ...):

b=`echo "console.log('$a'.toUpperCase());" | node`

Anda juga bisa menggunakan dd (tapi saya tidak mau!):

b=`echo "$a" | dd  conv=ucase 2> /dev/null`

Juga ketika Anda mengatakan 'shell' saya berasumsi maksud Anda bash tetapi jika Anda bisa menggunakannya zsh itu semudah

b=$a:l

untuk huruf kecil dan

b=$a:u

untuk huruf besar.


35
2018-05-14 09:36



Di zsh:

echo $a:u

Gotta suka zsh!


25
2018-01-27 05:37



Menggunakan GNU sed:

sed 's/.*/\L&/'

Contoh:

$ foo="Some STRIng";
$ foo=$(echo "$foo" | sed 's/.*/\L&/')
$ echo "$foo"
some string

16
2017-09-26 15:45



Untuk shell standar (tanpa bashisms) hanya menggunakan built-in:

uppers=ABCDEFGHIJKLMNOPQRSTUVWXYZ
lowers=abcdefghijklmnopqrstuvwxyz

lc(){ #usage: lc "SOME STRING" -> "some string"
    i=0
    while ([ $i -lt ${#1} ]) do
        CUR=${1:$i:1}
        case $uppers in
            *$CUR*)CUR=${uppers%$CUR*};OUTPUT="${OUTPUT}${lowers:${#CUR}:1}";;
            *)OUTPUT="${OUTPUT}$CUR";;
        esac
        i=$((i+1))
    done
    echo "${OUTPUT}"
}

Dan untuk huruf besar:

uc(){ #usage: uc "some string" -> "SOME STRING"
    i=0
    while ([ $i -lt ${#1} ]) do
        CUR=${1:$i:1}
        case $lowers in
            *$CUR*)CUR=${lowers%$CUR*};OUTPUT="${OUTPUT}${uppers:${#CUR}:1}";;
            *)OUTPUT="${OUTPUT}$CUR";;
        esac
        i=$((i+1))
    done
    echo "${OUTPUT}"
}

11
2018-01-21 10:27



Pra Bash 4.0

Bash Turunkan Kasus string dan tetapkan ke variabel

VARIABLE=$(echo "$VARIABLE" | tr '[:upper:]' '[:lower:]') 

echo "$VARIABLE"

10
2018-01-24 13:53