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