logo

Bash Split String

Tässä aiheessa olemme määritelleet kuinka jakaa merkkijono bash shell -komentosarjassa.

Joissakin tapauksissa saatamme joutua jakamaan merkkijonotiedot tiettyjen tehtävien suorittamiseksi. Suurin osa ohjelmointikielistä sisältää sisäänrakennetun 'split'-funktion, joka jakaa merkkijonotiedot useisiin osiin. Bash ei kuitenkaan sisällä tällaista sisäänrakennettua toimintoa. Mutta voimme käyttää erottimia minkä tahansa merkkijonotietojen jakamiseen bash-komentosarjassa. Erotin voi olla joko yksi merkki tai merkkijono, jossa on useita merkkejä.

Tutustu alla oleviin menetelmiin ymmärtääksesi kuinka jakaa merkkijono bash-kuoressa:

Jaa käyttämällä $IFS-muuttujaa

Seuraavat vaiheet jakaaksesi merkkijonon bashissa käyttämällä $IFS:ää:

  • $IFS on erityinen sisäinen muuttuja, jota käytetään jakamaan merkkijono sanoiksi. $IFS-muuttuja on nimeltään ' Sisäinen kenttäerotin ', joka määrittää, kuinka Bash tunnistaa rajat. $IFS:ää käytetään määrittämään tietty erotin [ IFS='' ] merkkijonon jakamiseen. Välilyönti on $IFS:n oletusarvo. Voimme kuitenkin käyttää myös arvoja, kuten ' ', ' ', '-' jne. erottimena.
  • Erottimen määrittämisen jälkeen merkkijono voidaan lukea kahdella vaihtoehdolla: '-r' ja '-a'. eli lue -ra ARR <<< '$str' .
    Tässä vaihtoehtoa '-r' käytetään määrittelemään, että kenoviiva () on merkki ennemmin kuin estomerkki. Vaihtoehtoa '-a' käytetään määrittämään, että sanat (erotettuina $IFS:llä) liitetään nollasta alkavan taulukon peräkkäiseen indeksiin.
  • Sitten käytämme bash 'for' -silmukkaa päästäksemme taulukkoon jaettuja tokeneita.

Ymmärretään tämä mekanismi muutamien esimerkkien avulla:

Esimerkki 1: Bash-jakomerkkijono välilyönnillä

Tässä esimerkissä merkkijono jaetaan käyttämällä välilyöntimerkkiä.

Bash-skripti

 #!/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'>

Tässä bash-skriptissä olemme käyttäneet seuraavia parametrilaajennuksia:

    ${parameter%%word}
    Se poistaa pisimmän vastaavan jälkiliitekuvion.${parameter#word}
    Se poistaa lyhimmän vastaavan etuliitekuvion.

Lähtö

Bash Split String

Esimerkki 3: Bash Split String Trim Command -komennolla

Tässä esimerkissä olemme käyttäneet trim (tr) -komentoa merkkijonon jakamiseen. Luku-komennon sijaan trim-komentoa käytetään erottimen merkkijonon jakamiseen.

Bash-skripti

 #!/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 

Lähtö

Bash Split String

Huomautus: On huomattava, että taulukon elementit jaetaan 'välilyönnillä', jos käytämme trimmauskomentoa merkkijonon jakamiseen. Esimerkiksi elementtejä, kuten 'Windows-käyttöjärjestelmä', käsitellään kahtena eri sanana.

Johtopäätös

Tässä aiheessa osoitimme kuinka jakaa merkkijono bash-komentosarjassa erityyppisissä skenaarioissa erottimen kanssa tai ilman.