Operaciones con cadenas
Contenidos
Operaciones con cadenas en Bash
Si estás familiarizado con las variables en bash, ya sabes que no hay tipos de datos separados para string, int, etc. Todo es una variable.
Pero esto no significa que no haya funciones de manipulación de cadenas.
En este capítulo, aprenderás cómo manipular cadenas usando una variedad de operaciones con ellas. Aprenderás a obtener la longitud de una cadena, a concatenar cadenas, a extraer subcadenas, a reemplazar subcadenas, ¡y mucho más!
Obtener la longitud de la cadena
Empecemos por obtener la longitud de una cadena en bash.
Una cadena no es más que una secuencia (array) de caracteres. Creemos una cadena llamada distro e inicialicemos su valor a «Ubuntu«.
distro="Ubuntu"
Ahora, para obtener la longitud de la cadena de distro, sólo hay que añadir #
antes del nombre de la variable. Puedes utilizar la siguiente sentencia:
$ echo ${#distro}
6
Ten en cuenta que el comando echo es para imprimir el valor. {#cadena}
es lo que da la longitud de la cadena.
Concatenar dos cadenas
Puedes añadir una cadena al final de otra; este proceso se llama concatenación.
Para demostrarlo, vamos a crear primero dos cadenas de texto, cad1 y cad2, como se indica a continuación:
cad1="rompe"
cad2="cabezas"
Ahora puedes unir ambas cadenas y asignar el resultado a una nueva cadena llamada cad3 como sigue:
cad3=$cad1$cad2
No puede ser más sencillo que esto, ¿verdad?
Hallar subcadenas
Puedes encontrar la posición (índice) de una letra o palabra específica en una cadena. Para demostrarlo, vamos a crear primero una cadena llamada cad de la siguiente manera:
cad="Bash es genial"
Ahora puedes obtener la posición específica (índice) de la subcadena genial. Para conseguirlo, utiliza el comando expr
:
$ palabra="genial"
$ expr index "$cad" "$palabra"
9
El resultado 9 es el índice donde la palabra “genial” comienza en la cadena cad.
El uso de declaraciones condicionales se tratará más adelante
Extracción de subcadenas
También puedes extraer subcadenas de una cadena; es decir, puedes extraer una letra, una palabra o unas cuantas palabras de una cadena.
Para demostrarlo, vamos a crear primero una cadena llamada floss de la siguiente manera:
floss="Trisquel es un sistema operativo libre"
Ahora digamos que quiere extraer la primera palabra «Trisquel» en la cadena floss. Necesitas especificar la posición inicial (índice) de la subcadena deseada y el número de caracteres que necesitas extraer.
Por lo tanto, para extraer la subcadena «Trisquel», usarás 0 como posición inicial y extraerás 6 caracteres desde allí:
$ echo ${floss:0:8}
Trisquel
Observa que la primera posición de una cadena es cero, al igual que ocurre con las matrices en bash. También puedes especificar sólo la posición inicial de una subcadena y omitir el número de caracteres. En este caso, se extraerá todo desde la posición inicial hasta el final de la cadena.
Por ejemplo, para extraer la subcadena «sistema operativo libre» de la cadena floss; sólo necesitamos especificar la posición inicial 15:
$ echo ${floss:15}
sistema operativo libre
Sustitución de subcadenas
También puede sustituir una subcadena por otra subcadena; por ejemplo, puede sustituir «Trisquel» por «Debian» en la cadena foss de la siguiente manera:
$ echo ${floss/Trisquel/Debian}
Debian es un sistema operativo libre
Hagamos otro ejemplo, sustituyamos la subcadena «libre» por «popular»:
$ echo ${floss/libre/popular}
Trisquel es un sistema operativo popular
Dado que sólo se muestra el valor con el comando echo, la cadena original no se altera.
Eliminación de subcadenas
También puedes eliminar las subcadenas. Para demostrarlo, vamos a crear primero una cadena llamada hecho de la siguiente manera:
hecho="El sol es una gran estrella"
Ahora puedes eliminar la subcadena «gran» de la cadena fact:
$ echo ${hecho/gran}
El sol es una estrella
Creemos otra cadena llamada móvil:
movil="3765-458-1321"
Ahora digamos que quieres eliminar todos los guiones de la cadena movil; la siguiente sentencia sólo eliminará la primera ocurrencia de guiones en la cadena movil:
$ echo ${movil/-}
3765458-1321
Para eliminar todas las ocurrencias de guiones de la cadena movil, tienes que usar dobles barra como sigue:
$ echo ${movil//-}
37654581321
Nota que estás usando sentencias echo y por lo tanto la cadena movil está intacta y no modificada; ¡sólo estás mostrando el resultado deseado!
Para modificar la cadena, necesitas asignar el resultado de nuevo a la cadena como sigue:
$ echo $movil
3765-458-1321
$ movil=${movil//-}
$ echo $movil
37654581321
Conversión de letras mayúsculas y minúsculas en la cadena
También puede convertir una cadena en minúscula o en mayúscula. Vamos a crear primero dos cadenas llamadas leyenda y actor:
leyenda="ricardo darin"
actor="ELEONORA WEXLER"
Puede convertir todas las letras de la cadena de leyenda en mayúsculas:
$ echo ${leyenda^^}
RICARDO DARIN
También se pueden convertir todas las letras de la cadena de actor en minúsculas:
$ echo ${actor,,}
eleonora wexler
Puedes convertir a mayúsculas sólo el primer carácter de la cadena leyenda:
$ echo ${leyenda^}
Ricardo darin
Del mismo modo, puedes convertir sólo el primer carácter de la cadena actor a minúsculas:
$ echo ${actor,}
eLEONORA WEXLER
Puedes cambiar ciertos caracteres de una cadena a mayúsculas o minúsculas; por ejemplo, las letras r
y d
a mayúsculas en la cadena leyenda:
$ echo ${leyenda^^[rd]}
RicaRDo DaRin