logo

Bash Split String

Šioje temoje apibrėžėme, kaip padalyti eilutę „bash“ apvalkalo scenarijuose.

Kai kuriais atvejais mums gali tekti padalinti eilutės duomenis, kad galėtume atlikti tam tikras konkrečias užduotis. Daugumoje programavimo kalbų yra įmontuota funkcija „padalyti“, kad bet kokie eilutės duomenys būtų padalyti į kelias dalis. Tačiau bash tokio tipo integruotos funkcijos nėra. Bet mes galime naudoti skyriklius, kad padalytume bet kokius eilučių duomenis „bash“ scenarijuose. Skirtiklis gali būti vienas simbolis arba eilutė su keliais simboliais.

Peržiūrėkite toliau pateiktus metodus, kad suprastumėte, kaip padalyti eilutę bash apvalkale:

Padalinkite naudodami $IFS kintamąjį

Toliau pateikiami žingsniai, kaip padalyti eilutę bash naudojant $IFS:

  • $IFS yra specialus vidinis kintamasis, naudojamas padalyti eilutę į žodžius. $IFS kintamasis vadinamas ' Vidinis lauko skyriklis “, kuris nustato, kaip Bashas atpažįsta ribas. $IFS naudojamas konkrečiam skyrikliui priskirti [ IFS='' ] eilutei padalyti. Tarpas yra numatytoji $IFS reikšmė. Tačiau kaip skirtuką galime naudoti tokias reikšmes kaip „ “, „ “, „-“ ir kt.
  • Priskyrus skyriklį, eilutę galima nuskaityti dviem variantais: „-r“ ir „-a“. t.y., skaityti -ra ARR <<< '$str' .
    Čia parinktis „-r“ naudojama norint apibrėžti, kad pasvirasis brūkšnys () yra simbolis, o ne pabėgimo simbolis. Parinktis „-a“ naudojama norint apibrėžti, kad žodžiai (atskirti $IFS) būtų priskirti masyvo, prasidedančio nuliu, nuosekliam indeksui.
  • Tada taikome bash „for“ kilpą, kad pasiektume žetonus, kurie yra suskirstyti į masyvą.

Supraskime šį mechanizmą pateikdami keletą pavyzdžių:

1 pavyzdys: „Bash Split String“ pagal tarpą

Šiame pavyzdyje eilutė padalijama naudojant tarpo simbolių skyriklį.

Bash scenarijus

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

Šiame „bash“ scenarijuje naudojome šiuos parametrus – išplėtimus:

    ${parameter%%word}
    Jis pašalina ilgiausiai atitinkantį priesagos modelį.${parameter#word}
    Jis pašalina trumpiausią atitinkantį priešdėlio šabloną.

Išvestis

Bash Split String

3 pavyzdys: Bash Split String naudojant Trim Command

Šiame pavyzdyje eilutei padalinti panaudojome komandą trim (tr). Užuot naudojusi skaitymo komandą, apkarpymo komanda naudojama skirstytuvo eilutei padalyti.

Bash scenarijus

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

Išvestis

Bash Split String

Pastaba: Reikėtų pažymėti, kad masyvo elementai skirstomi į „tarpo skyriklį“, jei eilutei padalinti taikome apkarpymo komandą. Pavyzdžiui, tokie elementai kaip „Windows OS“ bus traktuojami kaip du skirtingi žodžiai.

Išvada

Šioje temoje pademonstravome, kaip padalyti eilutę naudojant „bash“ scenarijus, naudojant skirtingų tipų scenarijus, naudojant skyriklį arba be jo.