web-dev-qa-db-ja.com

文字列のn番目の文字の大文字と小文字を変更する

BASH(または他の* nixツール、たとえばsedawktrなど)の文字列のn番目の文字の大文字と小文字を変更したい。

文字列全体の大文字と小文字を次のように変更できることを知っています。

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

「テスト」の3番目の文字の大文字と小文字を大文字に変更することはできますか?

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

Bashでは次のことができます。

$ 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

Perlの場合:

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

または

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

GNU sed(おそらく他の人)

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

awk

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

別のPerl

_$ str="abcdefgh"
$ Perl -pe 'substr($_,2,1) ^= " "' <<<"$str"
abCdefgh
_
  • 一般的な形式はsubstr($_,n,1)です。ここで、nは、大文字と小文字を区別する文字の位置です(0ベースのインデックス)。

  • ASCIIスペース付きの文字をxorすると、大文字と小文字が逆になります。

1
cuonglm