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


8

私は、文字列中のn番目の文字の大文字と小文字を変更するBASH(例えば、または任意の他の* nixのツールsedawktr、など)。

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

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

「テスト」の3文字目の大文字を大文字に変更できますか?

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

回答:


5

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

1
目的は何である~perl解決しますか?
cuonglm 2014年

@cuonglmのタイプミス。それは私が$ARGV[0]=~代わりに使用していた場所で試した以前のバージョンから残っていました<<<$str。ありがとう。
terdon

2
bash短縮することが可能foo=${str:2}${foo^}のみ文字列の最初の文字を大文字にされ、。
chepner 2014年


1

別のperl

$ str="abcdefgh"
$ perl -pe 'substr($_,2,1) ^= " "' <<<"$str"
abCdefgh
  • 一般的な形式はsubstr($_,n,1)どこnあなたはケース(0から始まるインデックス)を反転したい文字の位置です。

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


それは本当にクールです、スペースでアスキー文字をxorすることで大文字と小文字が逆になることを知りませんでした。
ryanmjacobs 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.