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
ryanmjacobs
sumber

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
terdon
sumber
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"
Steeldriver
sumber
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.

cuonglm
sumber
Itu benar-benar keren, saya tidak tahu bahwa untuk karakter ascii dengan spasi membalikkan kasusnya.
ryanmjacobs