Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

¿Cómo dividir en bash una cadena mediante un delimitador específico?

28 de mayo de 2011

¿Cómo puedo dividir una cadena de texto mediante un delimitador específico dentro de un script de bash?

En mi caso tengo la siguiente cadena de texto almacenada en una variable:

IN="[email protected];[email protected]"

Lo que necesito es dividir la cadena en base al delimitador ;, de manera que al final tenga estas dos nuevas variables:

ADDR1="[email protected]"
ADDR2="[email protected]"

No necesito obligatoriamente crear las variables ADDR1 y ADDR2 variables, ya que me vendría mejor que esta información estuviera almacenada en un array.

Estás leyendo una traducción autorizada de la pregunta How do I split a string on a delimiter in bash? planteada por stefanB en StackOverflow.

Respuestas

#1

La solución más sencilla para dividir la cadena y convertirla en un array sería el siguiente código:

IN="[email protected];[email protected]"
arrIN=(${IN//;/ })

Otra posible solución consiste en utilizar la variable IFS (Internal Field Separator). Al cambiar el valor de esta variable en un comando, los cambios afectan solamente a ese comando, así que no tiene efectos secundarios. El resultado sería:

IFS=';' read -ra ADDR <<< "$IN"
for i in "${ADDR[@]}"; do
    # procesar "$i"
done

Una generalización de la solución anterior sería:

while IFS=';' read -ra ADDR; do
    for i in "${ADDR[@]}"; do
        # procesar "$i"
    done
done <<< "$IN"

@librosweb

21 septiembre 2014, 16:04