El shell de linux: Manipulación de cadenas | Algo de Linux

lunes, 31 de marzo de 2008

El shell de linux: Manipulación de cadenas

En bash podemos realizar operaciones de manipulación de cadenas, como por ejemplo:
  • Obtener la longitud de una cadena.
  • Buscar caracteres dentro de una cadena.
  • Extraer una subcadena de una cadena.
Obtener la longitud de una cadena de caracteres.-
Podemos obtener la longitud de una cadena de tres formas:
  • ${#cadena}
  • expr length $cadena
  • expr "$cadena" : '.*'
Ejemplos:
$ micadena="Bienvenido al mundo de Linux"
$ echo "La longitud de la cadena es: `expr length $micadena`"
$ echo "La longitud de la cadena obtenida de otro modo: `${#micadena}`"
Buscar una cadena dentro de otra cadena de caracteres.-
Podemos averiguar cual es la posición de una cadena dentro de otra, utilizando las siguiente expresión:

expr index cadena_donde_buscar cadena_a_buscar

Devuelve la posición donde encuentra los caracteres a buscar dentro de la cadena, si no, devuelve un 0.

Ejemplo:
micadena="Bienvenido al mundo de Linux"
cadenaabuscar="Linux"
echo “La cadena $buscar se encuentra en la pos `expr index $micadena $cadenaabuscar`”
Como podemos ver, index busca una cadena, pero si lo que queremos utilizar como patrón de búsqueda es una expresión regular, usaremos:

expr match cadena_donde_buscar patrón_caracteres_buscar

Ejemplo:
cadena="342 ovejas en el redil"
numero=`expr match $cadena [0-9]*`
echo "El número de dígitos al comienzo de la cadena $cadena es: $numero"

Extraer una subcadena de una cadena de caracteres.-

Si queremos extraer una subcadena de una cadena de caracteres, utilizamos la siguiente expresión:

expr substr cadena posición n_caracteres

Para extraer una subcadena de una cadena indicamos la cadena, la posición y longitud a extraer.

Ejemplo:
$nif="70245678D"
echo “El DNI de $nif es `expr substr $nif 1 8`”
echo "La letra del $nif es `expr substr $nif 9 1`"

3 comentarios:

Mónica dijo...

Muy útil, gracias!

Anónimo dijo...

Gracias por el artículo. Me fue muy útil.

Marcelo Basile dijo...

gracias!