Eliminar subcadenas de una cadena

Cuando tenemos una cadena podemos sustituir subcadenas de una manera avanzada usando patrones con ${cadena#subcadena}. que elimina la coincidencia más corta al comienzo de la cadena y ${cadena##subcadena} que elimina la coincidencia más larga al comienzo de la cadena.

#!/bin/bash

string="barbicano"
echo $string
echo ${string#b*a}
echo ${string##b*a}

Que devuelve:

barbicano
rbicano
no

Con ${string#b*a} elimina la coincidencia más corta del patrón, que es ba.

Con ${string##b*a} elimina la coincidencia más larga del patrón, que es barbica.

Si no usamos un comodín sino que usamos un patrón fijo, la diferencia entre ## y # desaparece:

#!/bin/bash

string="barbicano"
echo $string
echo ${string#b*a}
echo ${string##b*a}

Devuelve:

barbicano
rbicano
rbicano

Podemos comenzar por el final cambiando el símbolo # por %:

#!/bin/bash

string="barbicano"
echo $string
echo ${string%a*}
echo ${string%%a*}

Devuelve:

barbicano
barbic
b

Hasta ahora, por comodidad hemos trabajado con una cadena muy sencilla que es barbicano, pero todo lo descrito anteriormente es aplicable a cadenas largas, incluso con espacios en blanco:

#!/bin/bash

string="Salió un ratón barbicano, colilargo, hociquirromo y encrespando el grueso lomo"
echo $string
echo ${string%a*}
echo ${string%%a*}

Devuelve:

Salió un ratón barbicano, colilargo, hociquirromo y encrespando el grueso lomo
Salió un ratón barbicano, colilargo, hociquirromo y encresp
S

Y comenzando por el principio de una cadena larga:

#!/bin/bash

string="Salió un ratón barbicano, colilargo, hociquirromo y encrespando el grueso lomo"
echo $string
echo ${string%a*}
echo ${string%%a*}

Devuelve:

Salió un ratón barbicano, colilargo, hociquirromo y encrespando el grueso lomo
arbicano, colilargo, hociquirromo y encrespando el grueso lomo
icano, colilargo, hociquirromo y encrespando el grueso lomo

 

 

 

Deja una respuesta

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