Altera o caso da n-ésima letra em uma string

8

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
    
por ryanmjacobs 16.11.2014 / 03:53

3 respostas

5

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
    
por 16.11.2014 / 04:06
6

Com o GNU sed (possivelmente outros)

sed 's/./\U&/3' <<< "$str"

com awk

awk -vFS= -vOFS= '{$3=toupper($3)}1' <<< "$str"
    
por 16.11.2014 / 04:27
1

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.

por 16.11.2014 / 07:59