En este tema, hemos definido cómo dividir una cadena en scripts de shell bash.
En algunos casos, es posible que necesitemos dividir los datos de la cadena para realizar algunas tareas específicas. La mayoría de los lenguajes de programación contienen la función incorporada 'división' para dividir cualquier cadena de datos en varias partes. Sin embargo, bash no contiene ese tipo de función incorporada. Pero podemos usar delimitadores para dividir cualquier dato de cadena en scripts bash. El delimitador puede ser un solo carácter o una cadena con varios caracteres.
Consulte los métodos a continuación para comprender cómo dividir cadenas en un shell bash:
Dividir usando la variable $IFS
Los siguientes son los pasos para dividir una cadena en bash usando $IFS:
- $IFS es una variable interna especial que se utiliza para dividir una cadena en palabras. La variable $IFS se llama ' Separador de campo interno ' que determina cómo Bash reconoce los límites. $IFS se utiliza para asignar el delimitador específico [ SI='' ] para dividir la cuerda. El espacio en blanco es un valor predeterminado de $IFS. Sin embargo, también podemos utilizar valores como ' ', ' ', '-' etc. como delimitador.
- Después de asignar el delimitador, una cadena se puede leer mediante dos opciones: '-r' y '-a'. es decir., leer -ra ARR <<< '$cadena' .
Aquí, la opción '-r' se usa para definir que la barra invertida () es un carácter en lugar de un carácter de escape. La opción '-a' se usa para definir que las palabras (separadas por $IFS) se asignan al índice secuencial de la matriz que comienza en cero. - Luego aplicamos el bucle bash 'for' para acceder a los tokens que están divididos en una matriz.
Entendamos este mecanismo con la ayuda de algunos ejemplos:
Ejemplo 1: Bash divide cadena por espacio
En este ejemplo, una cadena se divide utilizando un delimitador de carácter de espacio.
Guión de bash
#!/bin/bash #Example for bash split string by space read -p 'Enter any string separated by space: ' str #reading string value IFS='' #setting space as delimiter read -ra ADDR <<<'$str' #reading str as an array tokens separated by ifs for i in '${addr[@]}'; #accessing each element of do echo '$i' done < pre> <p> <strong>Output</strong> </p> <p>If we input a string 'We welcome you on Javatpoint', the output will look like this:</p> <img src="//techcodeview.com/img/bash-tutorial/11/bash-split-string.webp" alt="Bash Split String"> <h3>Example 2: Bash Split String by Symbol</h3> <p>In some cases, we may have a requirement to split a string by other delimiters such as a symbol or specific character. In this example, a string is split using a comma (,) symbol character as a delimiter.</p> <p> <strong>Bash Script</strong> </p> <pre> #!/bin/bash #Example for bash split string by Symbol (comma) read -p 'Enter Name, State and Age separated by a comma: ' entry #reading string value IFS=',' #setting comma as delimiter read -a strarr <<<'$entry' #reading str as an array tokens separated by ifs echo 'name : ${strarr[0]} ' 'state ${strarr[1]} 'age ${strarr[2]}' < pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/bash-tutorial/11/bash-split-string-2.webp" alt="Bash Split String"> <h2>Split without $IFS variable</h2> <p>In bash, a string can also be divided without using $IFS variable. The 'readarray' command with -d option is used to split the string data. The -d option is applied to define the separator character in the command like $IFS. Moreover, the bash loop is used to print the string in split form.</p> <p>Let's understand this logic with the help of some example:</p> <h3>Example 1: Bash Split String by Symbol</h3> <p>This example defines how a string value can be split without using $IFS. As per the script, a text value should be entered with the colon (:) sign so that it can be split. Check out the bash script below:</p> <p> <strong>Bash Script</strong> </p> <pre> #!/bin/bash #Example for bash split string without $IFS read -p 'Enter any string separated by colon(:) ' str #reading string value readarray -d : -t strarr <<<'$str' #split a string based on the delimiter ':' printf ' ' #print each value of array with help loop for (( n="0;" < ${#strarr[*]}; n++ )) do echo '${strarr[n]}' done pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/bash-tutorial/11/bash-split-string-3.webp" alt="Bash Split String"> <h3>Example 2: Bash Split String by another string</h3> <p>In this example, we have used idiomatic expressions where parameter expansion has completed.</p> <p> <strong>Bash Script</strong> </p> <pre> #!/bin/bash #Example for bash split string by another string str='WeLearnWelcomeLearnYouLearnOnLearnJavatpoint' delimiter=Learn s=$str$delimiter array=(); while [[ $s ]]; do array+=( '${s%%'$delimiter'*}' ); s=${s#*'$delimiter'}; done; declare -p array </pre> <p>In this bash script, we have used the following Parameter- Expansions:</p> <ul> <tr><td>${parameter%%word}</td> <br> It removes the longest matching suffix pattern. </tr><tr><td>${parameter#word}</td> <br> It removes the shortest matching prefix pattern. </tr></ul> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/bash-tutorial/11/bash-split-string-4.webp" alt="Bash Split String"> <h3>Example 3: Bash Split String using Trim Command</h3> <p>In this example, we have used trim (tr) command to split a string. Instead of using the read command, the trim command is used to split a string on the delimiter.</p> <p> <strong>Bash Script</strong> </p> <pre> #!/bin/bash #Example to split a string using trim (tr) command my_str='We;welcome;you;on;javatpoint.' my_arr=($(echo $my_str | tr ';'' ')) for i in '${my_arr[@]}' do echo $i done </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/bash-tutorial/11/bash-split-string-5.webp" alt="Bash Split String"> <h4>Note: It should be noted that array elements are divided on 'space delimiter' if we apply a trim command to split a string. For example, elements like 'Windows OS' will be treated as two different words.</h4> <h2>Conclusion</h2> <p>In this topic, we demonstrated how to split a string in bash scripting with different types of scenarios with or without using delimiter.</p> <hr></'$str'></pre></'$entry'></pre></'$str'>
En este script bash, hemos utilizado los siguientes parámetros-Expansiones:
Elimina el patrón de sufijo coincidente más largo.
Elimina el patrón de prefijo coincidente más corto.
Producción
Ejemplo 3: cadena dividida de Bash usando el comando Recortar
En este ejemplo, hemos utilizado el comando trim (tr) para dividir una cadena. En lugar de utilizar el comando de lectura, el comando de recorte se utiliza para dividir una cadena en el delimitador.
Guión de bash
#!/bin/bash #Example to split a string using trim (tr) command my_str='We;welcome;you;on;javatpoint.' my_arr=($(echo $my_str | tr ';'' ')) for i in '${my_arr[@]}' do echo $i done
Producción
Nota: Cabe señalar que los elementos de la matriz se dividen en un 'delimitador de espacio' si aplicamos un comando de recorte para dividir una cadena. Por ejemplo, elementos como 'SO Windows' se tratarán como dos palabras diferentes.
Conclusión
En este tema, demostramos cómo dividir una cadena en scripts bash con diferentes tipos de escenarios con o sin delimitador.
\'$str\'>\'$entry\'>'$str'>