Alterar maiúsculas e minúsculas da enésima letra em uma string

Alterar maiúsculas e minúsculas da enésima letra em uma string

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)onde nestá 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.

informação relacionada