Parseo basico de strings en BASH

De Recursos Educativos
Ir a la navegación Ir a la búsqueda

Usando el soporte de expresiones regulares de BASH

Usamos el operador =~ y la variable BASH_REMATCH[]


 $ re="^([^-]+)-(.*)$"
 $ [[ "ABCDE-123456" =~ $re ]] && var1="${BASH_REMATCH[1]}" && var2="${BASH_REMATCH[2]}"
 $ echo $var1
 ABCDE
 $ echo $var2
 123456

Usando pattern substitution de BASH

Si solo son 2 columnas bastaria con esto (el guion es el caracter separador):

$ STR="ABCDE-123456"
$ var1=${STR%-*}
$ var2=${STR#*-}
$ echo $var1
ABCDE
$ echo $var2</nowiki>
123456

Usando read

while read HOST IP 
do
 echo "host:${HOST} ip:${IP}"
done < nombre-fichero-input.txt

Si el separador no son espacios o tabs se puede hacer tambien, cambiando el valor de IFS (Inter Field Separator):

$ IFS=- read var1 var2 <<< ABCDE-123456
$ echo "$var1"
ABCDE
$ echo "$var2"
123456