logo

Bash Split String

În acest subiect, am definit cum să împărțim un șir în scripting-ul bash shell.

În unele cazuri, este posibil să fie nevoie să împărțim șirul de date pentru a efectua anumite sarcini. Majoritatea limbajelor de programare conțin funcția încorporată „split” pentru a împărți orice șir de date în mai multe părți. Cu toate acestea, bash nu conține un astfel de tip de funcție încorporată. Dar putem folosi delimitatori pentru a împărți orice șir de date în scripting bash. Delimitatorul poate fi fie un singur caracter, fie un șir cu mai multe caractere.

Consultați metodele de mai jos pentru a înțelege cum să împărțiți șirul într-un shell bash:

Împărțiți folosind variabila $IFS

Următorii sunt pașii pentru a împărți un șir în bash folosind $IFS:

  • $IFS este o variabilă internă specială care este folosită pentru a împărți un șir în cuvinte. Variabila $IFS se numește „ Separator de câmp intern ' care determină modul în care Bash recunoaște granițele. $IFS este folosit pentru a atribui delimitatorul specific [ IFS='' ] pentru împărțirea șirului. Spațiul alb este o valoare implicită de $IFS. Cu toate acestea, putem folosi și valori precum „ ”, „ ”, „-” etc. ca delimitator.
  • După atribuirea delimitatorului, un șir poate fi citit prin două opțiuni: „-r” și „-a”. adică, citește -ra ARR <<< '$str' .
    Aici, opțiunea „-r” este folosită pentru a defini că backslash () este un caracter, mai degrabă decât un caracter de escape. Opțiunea „-a” este folosită pentru a defini că cuvintele (separate de $IFS) sunt atribuite indexului secvenţial al tabloului care începe la zero.
  • Apoi aplicăm bucla bash „for” pentru a accesa jetoanele care sunt împărțite într-o matrice.

Să înțelegem acest mecanism cu ajutorul unor exemple:

Exemplul 1: Bash Împărțiți șirul după spațiu

În acest exemplu, un șir este împărțit folosind un delimitator de caractere de spațiu.

Bash Script

 #!/bin/bash #Example for bash split string by space read -p &apos;Enter any string separated by space: &apos; str #reading string value IFS=&apos;&apos; #setting space as delimiter read -ra ADDR &lt;&lt;<'$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 &apos;We welcome you on Javatpoint&apos;, 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 &apos;Enter Name, State and Age separated by a comma: &apos; entry #reading string value IFS=&apos;,&apos; #setting comma as delimiter read -a strarr &lt;&lt;<'$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 &apos;readarray&apos; 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&apos;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 &apos;Enter any string separated by colon(:) &apos; str #reading string value readarray -d : -t strarr &lt;&lt;<'$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=&apos;WeLearnWelcomeLearnYouLearnOnLearnJavatpoint&apos; delimiter=Learn s=$str$delimiter array=(); while [[ $s ]]; do array+=( &apos;${s%%&apos;$delimiter&apos;*}&apos; ); s=${s#*&apos;$delimiter&apos;}; 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=&apos;We;welcome;you;on;javatpoint.&apos; my_arr=($(echo $my_str | tr &apos;;&apos;&apos;
&apos;)) for i in &apos;${my_arr[@]}&apos; 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 &apos;space delimiter&apos; if we apply a trim command to split a string. For example, elements like &apos;Windows OS&apos; 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'>

În acest script bash, am folosit următoarele extensii de parametri:

    ${parameter%%word}
    Îndepărtează cel mai lung model de sufix care se potrivește.${parametru#cuvânt}
    Îndepărtează cel mai scurt model de prefix care se potrivește.

Ieșire

Bash Split String

Exemplul 3: Bash Split String folosind comanda Trim

În acest exemplu, am folosit comanda trim (tr) pentru a împărți un șir. În loc să utilizați comanda citire, comanda trim este folosită pentru a împărți un șir pe delimitator.

Bash Script

 #!/bin/bash #Example to split a string using trim (tr) command my_str=&apos;We;welcome;you;on;javatpoint.&apos; my_arr=($(echo $my_str | tr &apos;;&apos;&apos;
&apos;)) for i in &apos;${my_arr[@]}&apos; do echo $i done 

Ieșire

Bash Split String

Notă: Trebuie remarcat faptul că elementele matricei sunt împărțite pe „delimitator de spațiu” dacă aplicăm o comandă de tăiere pentru a împărți un șir. De exemplu, elemente precum „Windows OS” vor fi tratate ca două cuvinte diferite.

Concluzie

În acest subiect, am demonstrat cum să împărțim un șir în scripting bash cu diferite tipuri de scenarii cu sau fără utilizarea delimitatorului.