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.