GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo dividir una cadena en Bash Script

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.


Linux
  1. ¿Cómo establecer parámetros cuando Pipe Bash Script to Bash?

  2. ¿Cómo llamar a una función Bash en Bash Script dentro de Awk?

  3. ¿Cómo leer una cadena como número hexadecimal en Bash?

  4. Bash Script - Cómo leer la entrada del usuario

  5. ¿Cómo funciona cat << EOF en bash?

Cómo ejecutar un script Bash {7 métodos}

Cómo escribir un script Bash con ejemplos

Cómo verificar si una cadena contiene una subcadena en Bash

Cómo ejecutar un script Bash

Cómo encontrar la longitud de la cadena en Bash [Consejo rápido]

¿Cómo verifico la sintaxis de un script Bash sin ejecutarlo?