Apa perintah Bash yang bisa saya gunakan untuk mengonversi string huruf besar menjadi huruf kecil dan sebaliknya?
Terima kasih.
Apa perintah Bash yang bisa saya gunakan untuk mengonversi string huruf besar menjadi huruf kecil dan sebaliknya?
Terima kasih.
Jawaban:
Jika string sudah disimpan dalam variabel, Anda dapat menggunakan bash
ekspansi parameter, secara spesifik ${parameter,,pattern}
(tersedia sejak bash 4.0), di mana parameter
nama variabel Anda dan pattern
dinonaktifkan:
$ string="Hello, World!"
$ echo $string
Hello, World!
$ echo ${string,,}
hello, world!
Perhatikan bahwa ini tidak mengubah nilai variabel, hanya output. Untuk mengubah variabel Anda harus menetapkan nilai baru:
$ echo $string
Hello, World!
$ string=${string,,}
$ echo $string
hello, world!
Konversi huruf besar bekerja dengan ${parameter^^pattern}
:
$ echo ${string^^}
HELLO, WORLD!
Ini juga berfungsi dengan string Unicode (setidaknya dengan versi bash saat ini, mungkin membutuhkan setidaknya bash 4.3):
$ string='ἈΛΦΆβητος'
$ echo ${string,,}
ἀλφάβητος
$ echo ${string^^}
ἈΛΦΆΒΗΤΟΣ
Jika Anda menggunakan zsh
, Anda dapat menggunakan Bendera Ekspansi Parameter ( ${(FLAGS)NAME}
; tersedia sejak zsh 2.5) untuk mencapai hasil yang sama. The bash
sintaks tidak bekerja di zsh
1) . Bendera untuk huruf kecil adalah L
; untuk huruf besar adalah U
:
$ string="Hello, World!"
$ echo ${(L)string}
hello, world!
$ echo ${(U)string}
HELLO, WORLD!
$ echo $string
Hello, World!"
Ini juga berfungsi dengan string Unicode (setidaknya sejak zsh 5.0; saya tidak mencoba dengan versi sebelumnya):
$ string='ἈΛΦΆβητος'
$ echo ${(L)string}
ἀλφάβητος
$ echo ${(U)string}
ἈΛΦΆΒΗΤΟΣ
1) Meskipun, melihat bahwa zsh memiliki ini lebih lama, mungkin seharusnya: " zsh
sintaks tidak berfungsibash
.
${string,,}
notasi hanya ada untuk versi pesta 4 +. Kalau tidak, salah satu solusi lain diperlukan, seperti $(echo $string | tr '[:upper:]' '[:lower:]')
.
Ada beberapa metode yang bekerja dengan benar dengan Unicode:
GNU sed 4.2.2 berfungsi :
$ echo "Idą gęsi łąką" | sed 's/.*/\U&/'
IDĄ GĘSI ŁĄKĄ
bash 4.2.45 menyatakan tidak bekerja:
$ typeset -u ucase; ucase="Idą gęsi łąką"; echo $ucase
IDą GęSI łąKą
bash 4.2.45 perluasan parameter tidak berfungsi:
$ str="Idą gęsi łąką"; echo ${str^^}
IDą GęSI łąKą
bash 4.3.42 declare
dan pekerjaan perluasan parameter :
$ declare -u ucase
$ ucase="Idą gęsi łąką"
$ echo $ucase
IDĄ GĘSI ŁĄKĄ
$ echo ${ucase,,}
idą gęsi łąką
GNU tr 8.20 tidak berfungsi:
$ echo "Idą gęsi łąką" | tr '[:lower:]' '[:upper:]'
IDą GęSI łąKą
mawk (default awk di Ubuntu 13.10) tidak berfungsi:
$ echo "Idą gęsi łąką" | mawk '{print toupper($0)}'
IDą GęSI łąKą
pekerjaan gawk :
$ echo "Idą gęsi łąką" | gawk '{print toupper($0)}'
IDĄ GĘSI ŁĄKĄ
Perl pure uc () tidak berfungsi:
$ echo "Idą gęsi łąką" | perl -ne 'print uc($_);'
IDą GęSI łąKą
Python 2 tanpa petunjuk Unicode tidak berfungsi:
$ echo "Idą gęsi łąką" | python -c 'import sys; print sys.stdin.read().upper(),'
IDą GęSI łąKą
Python 2 ketika diperintahkan untuk berurusan dengan karya Unicode :
$ echo "Idą gęsi łąką" | python -c 'import sys; print sys.stdin.read().decode("utf-8").upper(),'
IDĄ GĘSI ŁĄKĄ
Python 3 berfungsi :
$ echo "Idą gęsi łąką" | python3 -c 'import sys; print(sys.stdin.read().upper(), end="")'
IDĄ GĘSI ŁĄKĄ
gawk
awk sebagai default (seperti yang ditunjukkan dengan update-alternatives --display awk
). Apakah Anda yakin mawk
apakah default di 13.10?
sed
sejak 1990 telah mendukung \U
opsi ;-). Bukan fitur spesifik gnu-sed. Kalau tidak, jawaban yang bagus, begitu banyak pilihan, begitu sedikit waktu ;-) Semoga sukses untuk semua!
uc
tidak berfungsi di Perl karena Anda harus use Encode
atau use utf8
. Tulis ulang contoh Anda sebagai echo "Idą gęsi łąką" | perl -ne 'use Encode;print encode("utf-8",uc(decode("utf-8",$_)))'
dan itu akan berhasil. Lihat juga stackoverflow.com/a/13261662/3701431
Saya akan menggunakan bash internal yang mengeset atau declare perintah untuk mendefinisikan variabel huruf kecil.
$ typeset -l lcase
$ lcase="LoWeR cAsE"
$ echo $lcase
lower case
Karakter diturunkan ketika nilai ditetapkan, bukan saat Anda mengetik variabel. Jadi lebih baik mengeset di awal skrip. Untuk huruf besar, Anda dapat mengeset -u .
$ typeset -u ucase
$ ucase="Upper cAsE"
$ echo $ucase
UPPER CASE
Ini tidak spesifik untuk bash shell, yang berfungsi juga pada ksh, mungkin dalam definisi shell POSIX.
EDIT: Banyak orang dengan lembut menunjukkan kepada saya fakta bahwa mengeset sekarang dianggap usang pada bash dan diganti dengan menyatakan . Kedua perintah itu setara.
$ 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.
Saya sendiri masih menggunakan sintaksis typeset karena saya bekerja pada lingkungan yang heterogen, jadi saya tidak perlu menulis ulang skrip saya.
typeset
dianggap sudah diganti dan diganti olehdeclare
Anda bisa melakukannya dengan tr
perintah.
Di terminal ( Ctrl+ Alt+ T)
Perintah ini:
echo 'String here' | tr "[:lower:]" "[:upper:]"
akan mengubah huruf kecil menjadi huruf besar.
echo 'STRING HERE' | tr "[:upper:]" "[:lower:]"
akan mengonversi huruf besar menjadi huruf kecil.
Contoh:
tr A-Z a-z
akan berhasil juga.
Ini bukan solusi bash murni, tetapi Anda dapat menyalurkan string Anda perl
(seperti yang dilakukan Olised
):
$ echo lowercase | perl -ne 'print "\U$_"'
LOWERCASE
Dan \L
akan memiliki efek sebaliknya:
$ echo UPPERCASE | perl -ne 'print "\L$_"'
uppercase
Gunakan perintah sederhana ini Untuk huruf besar ke huruf kecil Di mana 'f' adalah nama file tempat Anda ingin melakukan konversi.
tr "A-Z" "a-z" < f
Untuk huruf kecil ke huruf besar
tr "a-z" "A-Z" < f