logo

Bash Split String

U ovoj smo temi definirali kako podijeliti niz u skriptiranju bash ljuske.

U nekim ćemo slučajevima možda trebati podijeliti podatke niza kako bismo izvršili neke specifične zadatke. Većina programskih jezika sadrži ugrađenu funkciju 'split' za dijeljenje podataka niza na više dijelova. Međutim, bash ne sadrži takvu vrstu ugrađene funkcije. Ali možemo koristiti razdjelnike za razdvajanje bilo kojeg niza podataka u bash skriptiranju. Razdjelnik može biti jedan znak ili niz s više znakova.

Provjerite metode u nastavku da biste razumjeli kako podijeliti niz u bash ljusci:

Podijeli pomoću $IFS varijable

Slijede koraci za dijeljenje niza u bashu koristeći $IFS:

  • $IFS je posebna interna varijabla koja se koristi za dijeljenje niza u riječi. $IFS varijabla se zove ' Interni separator polja ' koji određuje kako Bash prepoznaje granice. $IFS se koristi za dodjeljivanje specifičnog graničnika [ IFS='' ] za dijeljenje niza. Praznina je zadana vrijednost $IFS. Međutim, također možemo koristiti vrijednosti kao što su ' ', ' ', '-' itd. kao graničnik.
  • Nakon dodjele graničnika, niz se može čitati s dvije opcije: '-r' i '-a'. tj. čitaj -ra ARR <<< '$str' .
    Ovdje se opcija '-r' koristi za definiranje da je obrnuta kosa crta () znak, a ne znak za izlaz. Opcija '-a' koristi se za definiranje da se riječi (odvojene s $IFS) dodjeljuju sekvencijalnom indeksu niza koji počinje od nule.
  • Zatim primjenjujemo bash 'for' petlju za pristup tokenima koji su podijeljeni u niz.

Razumimo ovaj mehanizam uz pomoć nekoliko primjera:

Primjer 1: Bash dijeli niz razmakom

U ovom primjeru, niz je podijeljen korištenjem razmaknice.

Bash skripta

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

U ovoj bash skripti koristili smo sljedeća proširenja parametara:

    ${parameter%%word}
    Uklanja najduži odgovarajući uzorak sufiksa.${parameter#word}
    Uklanja najkraći odgovarajući uzorak prefiksa.

Izlaz

Bash Split String

Primjer 3: Bash Split String pomoću naredbe Trim

U ovom smo primjeru upotrijebili naredbu trim (tr) za dijeljenje niza. Umjesto korištenja naredbe read, naredba trim koristi se za razdvajanje niza na razdjelniku.

Bash skripta

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

Izlaz

Bash Split String

Napomena: Treba napomenuti da su elementi niza podijeljeni na 'razdjelnik razmaka' ako primijenimo trim naredbu za dijeljenje niza. Na primjer, elementi poput 'Windows OS' tretirat će se kao dvije različite riječi.

Zaključak

U ovoj smo temi pokazali kako podijeliti niz u bash skriptiranju s različitim vrstama scenarija sa ili bez upotrebe razdjelnika.