Extraer una subcadena de una cadena en Shell Script

El formato para extraer subcadenas en Bash es ${cadena:inicio:longitud} donde:

  • inicio es el índice de la posición desde donde queremos empezar a extraer la subcadena, empezando los índices por el 0
  • longitud es el número de caracteres a extraer

Veamos varios ejemplos:

Extraer primer carácter

#!/bin/bash

string="Un soneto me manda hacer Violante"
echo "Primer carácter: "${string:0:1}

Devuelve:

Primer carácter: U

Extraer desde un determinado índice hasta el final de la cadena

#!/bin/bash

string="Un soneto me manda hacer Violante"
echo "Desde el carácter 25 hasta el final: "${string:25}

Devuelve:

Desde el carácter 25 hasta el final: Violante

Uso del índice negativo

Cuando usamos un índice negativo, cuenta los caracteres desde el final, por lo que, para extraer, en este ejemplo, Violante, deberemos indicar el número de caracteres negando el valor y dejando un espacio en blanco, para indicar que el signo menos forma una unidad con el número:

#!/bin/bash

string="Un soneto me manda hacer Violante"
echo "Desde el carácter -8 hasta el final: "${string: -8}

Buscar el índice de un carácter o subcadena

Para buscar el índice de una subcadena; o de un carácter, que no es más que una subcadena de un único elemento, usaremos:

pos=$(expr index "$string" "$substring")

Pero tenemos que tener en cuenta que nos devuelve la posición en un formato «humano». Internamente trabaja con la posición de una lista, que empieza por 0. Si queremos cortar desde ese carácter, deberemos restarle uno:

#!/bin/bash

string="Un soneto me manda hacer Violante"
let pos=$(expr index "$string" V)-1
echo "Desde el carácter $pos hasta el final: "${string:$pos}

Devuelve:

Desde el carácter 25 hasta el final: Violante

 

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada.