BASH
sed
文字列(または、、awk
などのような他の* nixツール)tr
で文字列のn番目の文字の大文字と小文字を変更したいと思います。
以下を使用して文字列全体の大文字と小文字を変更できることを知っています。
${str,,} # to lowercase
${str^^} # to uppercase
"Test" 3番目の文字の大文字と小文字を大文字に変更できますか?
$ export str="Test"
$ echo ${str^^:3}
TeSt
答え1
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 -ple 's/(?<=..)(.)/uc($1)/e; ' <<<$str
abCdefgh
または
$ perl -ple 's/(..)(.)/$1.uc($2)/e; ' <<<$str
abCdefgh
答え2
GNUの使用sed
(他のものも利用可能)
sed 's/./\U&/3' <<< "$str"
そしてawk
awk -vFS= -vOFS= '{$3=toupper($3)}1' <<< "$str"
答え3
その他perl
:
$ str="abcdefgh"
$ perl -pe 'substr($_,2,1) ^= " "' <<<"$str"
abCdefgh
一般的な形式は、大文字と小文字が反転する文字位置(ゼロベースのインデックス)が
substr($_,n,1)
どこにあるかです。n
ASCII文字とスペースをXORすると、大文字と小文字が逆になります。