En aquest tema, hem definit com dividir una cadena en els scripts de l'intèrpret d'ordres bash.
En alguns casos, és possible que hàgim de dividir les dades de la cadena per realitzar algunes tasques específiques. La majoria dels llenguatges de programació contenen la funció integrada 'split' per dividir qualsevol dada de cadena en diverses parts. Tanmateix, bash no conté aquest tipus de funció integrada. Però podem utilitzar delimitadors per dividir qualsevol dada de cadena en els scripts bash. El delimitador pot ser un únic caràcter o una cadena amb diversos caràcters.
Consulteu els mètodes següents per entendre com dividir la cadena en un shell bash:
Dividiu amb la variable $IFS
A continuació es mostren els passos per dividir una cadena a bash mitjançant $IFS:
- $IFS és una variable interna especial que s'utilitza per dividir una cadena en paraules. La variable $IFS s'anomena ' Separador de camps intern ' que determina com Bash reconeix els límits. $IFS s'utilitza per assignar el delimitador específic [ IFS='' ] per dividir la corda. L'espai en blanc és un valor predeterminat de $IFS. Tanmateix, també podem utilitzar valors com ara ' ', ' ', '-', etc. com a delimitador.
- Després d'assignar el delimitador, una cadena es pot llegir amb dues opcions: '-r' i '-a'. és a dir, llegir -ra ARR <<< '$str' .
Aquí, l'opció '-r' s'utilitza per definir que la barra invertida () és un caràcter en lloc de caràcter d'escapada. L'opció '-a' s'utilitza per definir que les paraules (separades per $IFS) s'assignen a l'índex seqüencial de la matriu que comença a zero. - A continuació, apliquem el bucle 'for' de bash per accedir als testimonis que es divideixen en una matriu.
Entendrem aquest mecanisme amb l'ajuda d'alguns exemples:
Exemple 1: Bash Split String per espai
En aquest exemple, una cadena es divideix mitjançant un delimitador de caràcters d'espai.
Bash Script
#!/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 aquest script bash, hem utilitzat les següents expansions de paràmetres:
Elimina el patró de sufix coincident més llarg.
Elimina el patró de prefix coincident més curt.
Sortida
Exemple 3: Bash Split String mitjançant l'ordre Trim
En aquest exemple, hem utilitzat l'ordre trim (tr) per dividir una cadena. En lloc d'utilitzar l'ordre read, l'ordre trim s'utilitza per dividir una cadena al delimitador.
Bash Script
#!/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
Sortida
Nota: cal tenir en compte que els elements de la matriu es divideixen en 'delimitador d'espais' si apliquem una ordre de retallada per dividir una cadena. Per exemple, elements com 'Windows OS' es tractaran com dues paraules diferents.
Conclusió
En aquest tema, vam demostrar com dividir una cadena en scripts bash amb diferents tipus d'escenaris amb o sense utilitzar el delimitador.
\'$str\'>\'$entry\'>'$str'>