Ubah huruf huruf ke-n dalam sebuah string


8

Saya ingin mengubah kasus surat-n dari string di BASH(atau alat * nix lainnya, misalnya sed, awk, tr, dll).

Saya tahu bahwa Anda dapat mengubah seluruh casing menggunakan:

${str,,} # to lowercase
${str^^} # to uppercase

Apakah mungkin mengubah huruf "Tes" ke-3 menjadi huruf besar?

$ export str="Test"
$ echo ${str^^:3}
TeSt

Jawaban:


5

Dalam bash yang bisa Anda lakukan:

$ str="abcdefgh"
$ foo=${str:2}  # from the 3rd letter to the end
echo ${str:0:2}${foo^} # take the first three letters from str and capitalize the first letter in foo.
abCdefgh

Dalam Perl:

$ perl -ple 's/(?<=..)(.)/uc($1)/e; ' <<<$str
abCdefgh

Atau

$ perl -ple 's/(..)(.)/$1.uc($2)/e; ' <<<$str
abCdefgh

1
Apa tujuan dari ~di perlsolusi?
cuonglm

@cuonglm salah ketik. Itu tersisa dari versin sebelumnya saya mencoba di mana saya menggunakan $ARGV[0]=~bukan <<<$str. Terima kasih.
terdon

2
The bashdapat dipersingkat dengan foo=${str:2}dan ${foo^}, yang hanya mengkapitalisasi karakter pertama dalam string.
chepner

7

Dengan GNU sed(mungkin yang lain)

sed 's/./\U&/3' <<< "$str"

Dengan awk

awk -vFS= -vOFS= '{$3=toupper($3)}1' <<< "$str"

1

Lainnya perl:

$ str="abcdefgh"
$ perl -pe 'substr($_,2,1) ^= " "' <<<"$str"
abCdefgh
  • Bentuk umum adalah di substr($_,n,1)mana nposisi huruf yang ingin Anda membalikkan case (indeks berbasis 0).

  • Ketika Anda xor karakter ASCII dengan spasi, Anda membalik kasusnya.


Itu benar-benar keren, saya tidak tahu bahwa untuk karakter ascii dengan spasi membalikkan kasusnya.
ryanmjacobs
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.