Secuencias de comandos Bash: cadena dividida
En este artículo, discutiremos cómo dividir cadenas en un script bash.
Dividir una sola cadena en varias cadenas se llama división de cadenas. Muchos lenguajes de programación tienen una función incorporada para realizar la división de cadenas, pero no existe una función incorporada en bash para hacerlo. Existen varios métodos para realizar una división de cadenas en bash. Veamos todos los métodos uno por uno con ejemplos.
Método 1: usar la variable IFS
$IFS(Separador de campo interno) es una variable de shell especial. Se utiliza para asignar el delimitador (una secuencia de uno o más caracteres en función de los cuales queremos dividir la cadena). Cualquier valor o carácter como ' ', ' ', '-' etc. puede ser el delimitador. Después de asignar el valor a la variable $IFS, es necesario leer el valor de la cadena. Podemos leer cadenas usando las opciones '-r' y '-a'.
- '-r': lee la barra invertida () como un carácter en lugar de un carácter de escape
- '-a': se utiliza para almacenar las palabras divididas en una variable de matriz que se declara después de la opción -a.
Ejemplo 1: dividir la cadena por espacio
Código:
#!/bin/bash # String text='Welcome to techcodeview.com' # Set space as the delimiter IFS=' ' # Read the split words into an array # based on space delimiter read -ra newarr < < < '$text' # Print each value of the array by using # the loop for val in '${newarr[@]}'; do echo '$val' done Producción:
Welcome to techcodeview.com
Ejemplo 2: dividir una cadena por un símbolo
División de cadena usando el símbolo @.
Código:
#!/bin/bash #String text='Welcome@[email protected]@!!' # Set @ as the delimiter IFS='@' # Read the split words into an array # based on space delimiter read -ra newarr < < < '$text' # Print each value of the array by # using the loop for val in '${newarr[@]}'; do echo '$val' done
Producción:
Welcome to techcodeview.com !!
Método 2: sin utilizar la variable IFS
En este método, se utiliza el comando readarray con la opción -d para dividir los datos de la cadena. '-d': esta opción actúa como una variable IFS para definir el delimitador.
Ejemplo 1: dividir cadena por espacio
Código:
#!/bin/bash # Read the main string text='Welcome to techcodeview.com' # Split the string by space readarray -d ' ' -t strarr < < < '$text' # Print each value of the array by # using loop for (( n=0; n < ${#strarr[*]}; n++)) do echo '${strarr[n]}' done Ahora veamos cómo se comporta el script:
- El script establece el valor de
text>Bienvenido a techcodeview.com. - El
readarray>El comando divide la cadena en una matriz usando el espacio como delimitador, lo que da como resultado la matrizstrarr>que contiene los siguientes elementos: Bienvenido a techcodeview.com. - El bucle for itera sobre cada elemento del
strarr>formación. - Imprime cada elemento uno por uno en líneas separadas.
Producción:
Welcome to techcodeview.com
Ejemplo 2: dividir usando a dos puntos como a delimitador
Código:
#!/bin/bash # Read the main string text='Welcome:to:techcodeview.com' # Split the string based on the delimiter, ':' readarray -d : -t strarr < < < '$text' # Print each value of the array by using # loop for (( n=0; n < ${#strarr[*]}; n++)) do echo '${strarr[n]}' done Producción:
Welcome to techcodeview.com
Método 3: dividir la cadena con un delimitador de varios caracteres
En este método, se usa una variable para almacenar datos de cadena y otra variable para almacenar datos delimitadores de varios caracteres. También se declara una variable de matriz para almacenar la cadena dividida.
Código:
# Define the string to split text='HelloRomy HelloPushkar HelloNikhil HelloRinkle' # store multi-character delimiter delimiter='Hello' # Concatenate the delimiter with the # main string string=$text$delimiter # Split the text based on the delimiter newarray=() while [[ $string ]]; do newarray+=( '${string%%'$delimiter'*}' ) string=${string#*'$delimiter'} done # Print the words after the split for value in ${newarray[@]} do echo '$value ' done Producción:
Romy Pushkar Nikhil Rinkle