Сценарии Bash — Разделить строку
В этой статье мы обсудим, как разделить строки в скрипте 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