Сценарии Bash — Разделить строку

Опубликовано: 30 Сентября, 2022

В этой статье мы обсудим, как разделить строки в скрипте bash.

Разделение одной строки на несколько строк называется разбиением строки. Многие языки программирования имеют встроенную функцию для разделения строк, но в bash нет встроенной функции для этого. Существуют различные способы разделения строки в bash. Давайте рассмотрим все методы один за другим с примерами.

Способ 1: использование переменной IFS

$IFS (внутренний разделитель полей) — это специальная переменная оболочки. Он используется для назначения разделителя (последовательности из одного или нескольких символов, на основе которых мы хотим разделить строку). Любое значение или символ, например ' ', ' ', '-' и т. д., может быть разделителем. После присвоения значения переменной $IFS необходимо прочитать строковое значение. Мы можем прочитать строку, используя опции «-r» и «-a».

  • '-r': обратная косая черта () читается как символ вместо escape-символа.
  • '-a': используется для хранения разделенных слов в переменной-массиве, которая объявляется после параметра -a.

Пример 1: Разделить строку по пробелу

Код:

#!/bin/bash

# String
text="Welcome to GeeksforGeeks"

# 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
GeeksforGeeks

Пример 2: Разделить строку по символу

Разделение строки с помощью символа @.

Код:

#!/bin/bash

#String
text="Welcome@to@GeeksforGeeks@!!"

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

Способ 2: без использования переменной IFS

В этом методе команда readarray с параметром -d используется для разделения строковых данных. '-d': эта опция действует как переменная IFS для определения разделителя.

Пример 1: Разделить строку по пробелу

Код:

#!/bin/bash

# Read the main string
text="Welcome to GeeksforGeeks"

# 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

Выход:

Welcome
to
GeeksforGeeks

Пример 2: разделение с использованием двоеточия в качестве разделителя

Код:

#!/bin/bash

# Read the main string
text="Welcome:to:GeeksforGeeks"

# 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
GeeksforGeeks

Способ 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