Manipulación de cadenas

( desarrollo / bash )

Bash tiene un modesto control de cadenas aunque en muchos scripts puede ser mucho más que interesante y en ocasiones muy útil. En algunos casos se usa opciones internas de Bash y en otras se apoya en el comando externo expr.

Longitud de cadena

nos indica la longitud de una cadena, para ello podemos usar estas formas:

cadena=abcABC123ABCabc
       012345678901234

echo ${#cadena}                 # 15
echo $(expr length $cadena)     # 15
echo $(expr "$cadena" : '.*')   # 15

Posición o indice

nos indica la posición del inicio de una subcadena o carácter, para ello podemos usar estas formas:

En las dos primeras $subcadena es una expresión regular y nos muestra el primera posición de dicha expresión. En la tercera la posición mostrada es del primer carácter de $subcadena que aparezca en $cadena.

Aquí tenemos un ejemplo:

cadena=abcABC123ABCabc
        123456789012345

echo `expr match "$cadena" 'abc[A-Z]*.2'`         # 8
echo `expr "$cadena" : 'abc[A-Z]*.2'`             # 8
echo `expr index "$cadena" C12`                   # 6 = posición de C
echo `expr index "$cadena" 1c`                    # 3 = 'c' en 3ra posición antes que '1' = 7.
echo "$cadena" "C12" | awk '{print index($1,$2)}' # 6
echo "$cadena" "1c" | awk '{print index($1,$2)}'  # 0 (no se encuentra la cadena '1c'

Extraer subcadena

nos permite extraer una subcadena de otra cadena, para ello podemos usar estas formas:

Borrar subcadena

diferentes formas de borrar subcadenas de una cadena:

Reemplazar subcadena

diferentes formas de reemplazar subcadenas de una cadena:

Mayúsculas / Minúsclas

Manipular Mayúsculas y Minúsculas

Saber si una cadena contiene una subcadena

Podemos necesitar saber si una subcadena está en una cadena, algo de tipo "si subcadena está en cadena entonces" y en Bash tenemos una forma muy sencilla:

cadena='una frase de texto cualquiera larga'
subcadena="cual"

if [[ "$cadena" == *"$subcadena"* ]]
then
  echo "Si hay '$subcadena' en '$cadena'";
fi
Modificado el 13 de agosto de 2010
Creado el 13 de agosto de 2010
   

Compartiendo conocimiento desde 1995 - I.M.D. I.M.D.