Cambiar mayúsculas y minúsculas en una cadena


8

Quiero cambiar el caso de la letra n-ésima de una cadena en BASH(o cualquier otra herramienta de * nix, por ejemplo sed, awk, tr, etc.).

Sé que puedes cambiar el caso de una cadena completa usando:

${str,,} # to lowercase
${str^^} # to uppercase

¿Es posible cambiar el caso de la tercera letra de "Prueba" a mayúsculas?

$ export str="Test"
$ echo ${str^^:3}
TeSt

Respuestas:


5

En bash podrías hacer:

$ 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

En perl:

$ perl -ple 's/(?<=..)(.)/uc($1)/e; ' <<<$str
abCdefgh

O

$ perl -ple 's/(..)(.)/$1.uc($2)/e; ' <<<$str
abCdefgh

1
¿Cuál es el propósito de ~en perlsolución?
Cuonglm

@cuonglm un error tipográfico. Quedaba de una versión anterior que probé donde estaba usando en $ARGV[0]=~lugar de <<<$str. Gracias.
terdon

2
Se bashpuede acortar con foo=${str:2}y ${foo^}, que solo capitaliza el primer carácter de la cadena.
chepner

7

Con GNU sed(posiblemente otros)

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

Con awk

awk -vFS= -vOFS= '{$3=toupper($3)}1' <<< "$str"

1

Otro perl:

$ str="abcdefgh"
$ perl -pe 'substr($_,2,1) ^= " "' <<<"$str"
abCdefgh
  • La forma general es substr($_,n,1)dónde nestá la posición de la letra que desea invertir el caso (índice basado en 0).

  • Cuando crea un carácter ASCII con espacio, invierte su mayúscula.


Eso es realmente genial, no sabía que hacer un personaje ascii con espacio invierte su caso.
ryanmjacobs
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.