No bash você poderia fazer:
$ str="abcdefgh"
$ foo=${str:2};echo ${str:0:2}${foo^}
abCdefgh
Em Perl:
$ perl -ple 's/(?<=..)(.)/uc($1)/e; ' <<<$str
abCdefgh
Ou
$ perl -ple 's/(..)(.)/$1.uc($2)/e; ' <<<$str
abCdefgh
Eu quero alterar o caso da n-ésima letra de uma string em BASH
(ou qualquer outra ferramenta * nix, por exemplo, sed
, awk
, tr
, etc).
Eu sei que você pode mudar o caso de uma string inteira usando:
${str,,} # to lowercase
${str^^} # to uppercase
É possível alterar o caso da terceira letra do "Teste" para maiúscula?
$ export str="Test"
$ echo ${str^^:3}
TeSt
Com o GNU sed
(possivelmente outros)
sed 's/./\U&/3' <<< "$str"
com awk
awk -vFS= -vOFS= '{$3=toupper($3)}1' <<< "$str"
Outro perl
:
$ str="abcdefgh"
$ perl -pe 'substr($_,2,1) ^= " "' <<<"$str"
abCdefgh
A forma geral é substr($_,n,1)
, em que n
é a posição da letra que você deseja inverter o caso (índice baseado em 0).
Quando você xor um caractere ASCII com espaço, você inverte o seu caso.
Tags bash sed shell shell-script string