12 agosto, 2009

Cómo hacer trim en Bash

No sé a vosotros, pero a mí en los scripts que hago siempre suelo necesitar hacer trim de una cadena, esto es, eliminar los espacios al comienzo y al final de una cadena.

Bien pues esto es tan «sencillo» como jugar con las expansiones de BASH (más info en man bash), aquí va un ejemplo:
#!/bin/bash
cadena='     prueba de trim        '
#Los :: son para ver claramente los espacios
echo "+ Cadena original ::${cadena}::"
# quito los espacios del principio
cadena="${cadena#"${cadena%%[![:space:]]*}"}"
# quito los espacios del final
cadena="${cadena%"${cadena##*[![:space:]]}"}"
echo "+ Cadena sin espacios ::${cadena}::" 

La salida de este script será
+ Cadena original ::     prueba de trim        ::
+ Cadena sin espacios ::prueba de trim::

Esto es sólo un ejemplo de cosas que se pueden hacer con BASH y que ha acelerado 10 veces un script (antes había sed y cut por todos lados), os recomiendo leeros detenidamente man bash. Tiene cosas muy divertidas, pero eso lo dejaremos para entradas futuras :-)

2 comentarios:

Victor Moral dijo...

Interesante y útil aporte. Estaba buscando ejemplos sobre el tema y me encuentro con que aquí ya está resuelto. Gracias.

kcdtv dijo...

tenía un problema con una variable que se llenaba de espacios y me ha sido muy útil usar el tippara quitar espacios al final

ESSIDSUCIO=$(echo ${ESSID[${i}]})
ESSID="${ESSIDSUCIO%"${ESSIDSUCIO##*[![:space:]]}"}"

Esto si, no encontré la forma de hacerlo en una linea y he tenido que pasar por una variable intermedia porque el valor que quería tratar esta en un array.
Es gracias a blog como el tuyo que un novato principiante como yo aprende y no se queda bloqueado años en cosas del palo... gracias :)