Bash Scripting – розділити рядок

У цій статті ми обговоримо, як розділити рядки в сценарії bash.

Поділ одного рядка на кілька рядків називається розділенням рядка. Багато мов програмування мають вбудовану функцію для виконання розділення рядків, але в bash немає вбудованої функції для цього. Існують різні методи виконання розділення рядка в bash. Давайте розглянемо всі методи по черзі з прикладами.

Спосіб 1: Використання змінної IFS

$IFS(Internal Field Separator) — це спеціальна змінна оболонки. Він використовується для призначення роздільника (послідовності з одного або кількох символів, на основі яких ми хочемо розділити рядок). Роздільником може бути будь-яке значення або символ, як-от « », « », «-» тощо. Після призначення значення змінній $IFS потрібно прочитати значення рядка. Ми можемо читати рядок за допомогою параметрів «-r» і «-a».

  • «-r»: він читає зворотну косу риску () як символ замість контрольного символу
  • «-a»: використовується для зберігання розділених слів у змінній масиву, яка оголошується після параметра -a.

Приклад 1: Розділити рядок пробілом

код:

#!/bin/bash # String text='Welcome to techcodeview.com' # Set space as the delimiter IFS=' ' # Read the split words into an array # based on space delimiter read -ra newarr  < < < '$text' # Print each value of the array by using # the loop for val in '${newarr[@]}'; do echo '$val' done 

Вихід:

Welcome to techcodeview.com 

Приклад 2: розділення рядка на символ

Розбиття рядка за допомогою символу @.

код:

#!/bin/bash #String text='Welcome@[email protected]@!!' # Set @ as the delimiter IFS='@' # Read the split words into an array # based on space delimiter read -ra newarr  < < < '$text' # Print each value of the array by # using the loop for val in '${newarr[@]}'; do echo '$val' done 

Вихід:

Welcome to techcodeview.com !! 

Спосіб 2: без використання змінної IFS

У цьому методі команда readarray з опцією -d використовується для розділення даних рядка. «-d»: цей параметр діє як змінна IFS для визначення розділювача.

Приклад 1: розділити рядок на пробіл

код:

#!/bin/bash # Read the main string text='Welcome to techcodeview.com' # Split the string by space readarray -d ' ' -t strarr  < < < '$text' # Print each value of the array by # using loop for (( n=0; n  < ${#strarr[*]}; n++)) do echo '${strarr[n]}' done 

Тепер давайте подивимося, як поводиться сценарій:

  • Сценарій встановлює значення text> Ласкаво просимо на techcodeview.com.
  • The readarray> Команда розбиває рядок на масив, використовуючи пробіл як роздільник, у результаті чого утворюється масив strarr> містить наступні елементи: Welcome, to, techcodeview.com.
  • Цикл for повторює кожен елемент strarr> масив.
  • Він друкує кожен елемент один за одним в окремих рядках.

Вихід:

Welcome to techcodeview.com 

Приклад 2: розділити за допомогою a двокрапка як a роздільник

код:

#!/bin/bash # Read the main string text='Welcome:to:techcodeview.com' # Split the string based on the delimiter, ':' readarray -d : -t strarr  < < < '$text' # Print each value of the array by using # loop for (( n=0; n  < ${#strarr[*]}; n++)) do echo '${strarr[n]}' done 

Вихід:

Welcome to techcodeview.com 

Спосіб 3. Розділіть рядок за допомогою багатосимвольного розділювача

У цьому методі змінна використовується для зберігання рядкових даних, а інша змінна використовується для зберігання даних багатосимвольного роздільника. Також оголошено змінну масиву для зберігання розділеного рядка.

код:

# Define the string to split text='HelloRomy HelloPushkar HelloNikhil HelloRinkle' # store multi-character delimiter delimiter='Hello' # Concatenate the delimiter with the # main string string=$text$delimiter # Split the text based on the delimiter newarray=() while [[ $string ]]; do newarray+=( '${string%%'$delimiter'*}' ) string=${string#*'$delimiter'} done # Print the words after the split for value in ${newarray[@]} do echo '$value ' done 

Вихід:

Romy Pushkar Nikhil Rinkle