Categorías
GNU-Linux Script

Crea y ejecuta tu primer script de Bash Shell

Operaciones con cadenas

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