У овој теми смо дефинисали како да поделимо стринг у басх схелл скриптовима.
У неким случајевима, можда ћемо морати да поделимо низ података да бисмо извршили неке специфичне задатке. Већина програмских језика садржи уграђену функцију 'сплит' за поделу свих података низа на више делова. Међутим, басх не садржи такав тип уграђене функције. Али можемо користити граничнике да поделимо било који низ података у басх скриптовима. Разграничење може бити или један знак или низ са више знакова.
Погледајте методе у наставку да бисте разумели како да поделите стринг у басх љусци:
Поделите помоћу променљиве $ИФС
Следе кораци за раздвајање стринга у басх користећи $ИФС:
- $ИФС је посебна интерна варијабла која се користи за раздвајање стринга на речи. $ИФС променљива се зове ' Интерни сепаратор поља ' што одређује како Басх препознаје границе. $ИФС се користи за додељивање специфичног граничника [ ИФС='' ] за дељење низа. Бели размак је подразумевана вредност $ИФС. Међутим, као граничник можемо користити и вредности као што су 'т', 'н', '-' итд.
- Након доделе граничника, стринг се може прочитати помоћу две опције: '-р' и '-а'. тј. реад -ра АРР <<< '$стр' .
Овде се опција '-р' користи за дефинисање да је обрнута коса црта () знак, а не излазни знак. Опција '-а' се користи да дефинише да су речи (раздвојене $ИФС) додељене секвенцијалном индексу низа који почиње од нуле. - Затим примењујемо басх 'фор' петљу да приступимо токенима који су подељени у низ.
Хајде да разумемо овај механизам уз помоћ неких примера:
Пример 1: Басх подели стринг по размаку
У овом примеру, стринг се дели помоћу граничника знакова размака.
Басх Сцрипт
#!/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'>
У овој басх скрипти користили смо следеће проширења параметара:
Уклања најдужи одговарајући образац суфикса.
Уклања најкраћи одговарајући образац префикса.
Излаз
Пример 3: Басх подељени стринг помоћу команде Трим
У овом примеру смо користили команду трим (тр) да поделимо низ. Уместо коришћења команде за читање, наредба трим се користи за раздвајање низа на граничнику.
Басх Сцрипт
#!/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
Излаз
Напомена: Треба напоменути да су елементи низа подељени на 'размакницу' ако применимо команду трим да поделимо низ. На пример, елементи попут „Виндовс ОС“ ће се третирати као две различите речи.
Закључак
У овој теми смо демонстрирали како да поделимо стринг у басх скриптама са различитим типовима сценарија са или без коришћења граничника.
\'$str\'>\'$entry\'>'$str'>