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