Supongamos que tiene una cadena larga con varias palabras separadas por una coma o un guión bajo. Desea dividir esta cadena y extraer las palabras individuales.
Puede dividir cadenas en bash usando el Separador de campo interno (IFS) y el comando de lectura o puede usar el comando tr. Déjame mostrarte cómo hacerlo con ejemplos.
Método 1:Dividir cadena usando el comando de lectura en Bash
Aquí está mi secuencia de comandos de muestra para dividir la cadena usando el comando de lectura:
#!/bin/bash
#
# Script to split a string based on the delimiter
my_string="Ubuntu;Linux Mint;Debian;Arch;Fedora"
IFS=';' read -ra my_array <<< "$my_string"
#Print the split string
for i in "${my_array[@]}"
do
echo $i
done
La parte que dividió la cadena está aquí:
IFS=';' read -ra my_array <<< "$my_string"
Déjame explicártelo. IFS determina el delimitador en el que desea dividir la cadena. En mi caso, es un punto y coma. Puede ser lo que quieras, como espacio, tabulador, coma o incluso una letra.
El IFS en el comando de lectura divide la entrada en el delimitador. El comando de lectura lee la entrada sin procesar (opción -r), por lo que interpreta las barras invertidas literalmente en lugar de tratarlas como un carácter de escape. La opción -a con el comando de lectura almacena la palabra leída en una matriz en bash.
En palabras más simples, la cadena larga se divide en varias palabras separadas por el delimitador y estas palabras se almacenan en una matriz.
Ahora puede acceder a la matriz para obtener cualquier palabra que desee o usar el ciclo for en bash para imprimir todas las palabras una por una como lo hice en el script anterior.
Aquí está el resultado del script anterior:
Ubuntu
Linux Mint
Debian
Arch
Fedora
Método 2:Dividir cadena usando el comando tr en Bash
Este es el ejemplo de cadena dividida bash usando el comando tr (traducir):
#!/bin/bash
#
# Script to split a string based on the delimiter
my_string="Ubuntu;Linux Mint;Debian;Arch;Fedora"
my_array=($(echo $my_string | tr ";" "\n"))
#Print the split string
for i in "${my_array[@]}"
do
echo $i
done
Este ejemplo es bastante similar al anterior. En lugar del comando de lectura, el comando tr se usa para dividir la cadena en el delimitador.
El problema con este enfoque es que el elemento de la matriz se divide en 'delimitador de espacio'. Por eso, elementos como "Linux Mint" se tratarán como dos palabras.
Aquí está el resultado del script anterior:
Ubuntu
Linux
Mint
Debian
Arch
Fedora
Esa es la razón por la que prefiero el primer método para dividir cadenas en bash.
Espero que este rápido tutorial de bash te haya ayudado a dividir la cadena. En una publicación relacionada, es posible que también desee leer sobre la comparación de cadenas en bash.
Y si es absolutamente nuevo en Bash, lea nuestra serie de tutoriales para principiantes de Bash.