Šajā tēmā mēs esam definējuši, kā sadalīt virkni bash čaulas skriptēšanā.
Dažos gadījumos mums, iespējams, būs jāsadala virknes dati, lai veiktu noteiktus uzdevumus. Lielākajā daļā programmēšanas valodu ir iebūvēta funkcija 'sadalīt', lai sadalītu virknes datus vairākās daļās. Tomēr bash nesatur šāda veida iebūvēto funkciju. Bet mēs varam izmantot atdalītājus, lai sadalītu jebkādus virknes datus bash skriptēšanā. Atdalītājs var būt vai nu viena rakstzīme, vai virkne ar vairākām rakstzīmēm.
Lai saprastu, kā sadalīt virkni bash čaulā, skatiet tālāk norādītās metodes.
Sadaliet, izmantojot $IFS mainīgo
Tālāk ir norādītas darbības, lai sadalītu virkni bash, izmantojot $IFS:
- $IFS ir īpašs iekšējais mainīgais, ko izmanto, lai sadalītu virkni vārdos. $IFS mainīgo sauc par ' Iekšējā lauka atdalītājs Kas nosaka, kā Bašs atpazīst robežas. $IFS tiek izmantots, lai piešķirtu konkrēto norobežotāju [ IFS='' ] virknes dalīšanai. Baltā atstarpe ir $IFS noklusējuma vērtība. Tomēr kā atdalītāju varam izmantot arī tādas vērtības kā ' ', ' ', '-' utt.
- Pēc norobežotāja piešķiršanas virkni var nolasīt ar divām opcijām: '-r' un '-a'. i., lasīt -ra ARR <<< '$str' .
Šeit opcija “-r” tiek izmantota, lai definētu, ka slīpsvītra () ir rakstzīme, nevis atsoļa rakstzīme. Opciju “-a” izmanto, lai definētu, ka vārdi (atdalīti ar $IFS) tiek piešķirti masīva secīgajam indeksam, kas sākas ar nulli. - Pēc tam mēs izmantojam bash 'for' cilpu, lai piekļūtu marķieriem, kas ir sadalīti masīvā.
Izpratīsim šo mehānismu, izmantojot dažus piemērus:
Piemērs 1: Bash sadalīt virkni pēc atstarpes
Šajā piemērā virkne tiek sadalīta, izmantojot atstarpes rakstzīmju atdalītāju.
Bash skripts
#!/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'>
Šajā bash skriptā mēs esam izmantojuši šādus parametru paplašinājumus:
Tas noņem garāko atbilstošo sufiksu rakstu.
Tas noņem īsāko atbilstošo prefiksa rakstu.
Izvade
3. piemērs: Bash Split String, izmantojot komandu Trim
Šajā piemērā mēs esam izmantojuši komandu trim (tr), lai sadalītu virkni. Lasīšanas komandas vietā tiek izmantota apgriešanas komanda, lai sadalītu virkni atdalītājā.
Bash skripts
#!/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
Izvade
Piezīme. Jāņem vērā, ka masīva elementi tiek sadalīti uz 'atstarpes norobežotāja', ja virknes sadalīšanai izmantojam komandu apgriešana. Piemēram, tādi elementi kā “Windows OS” tiks uzskatīti par diviem dažādiem vārdiem.
Secinājums
Šajā tēmā mēs parādījām, kā sadalīt virkni bash skriptēšanā ar dažāda veida scenārijiem, izmantojot vai neizmantojot atdalītāju.
\'$str\'>\'$entry\'>'$str'>