Поиск по сайту:

Манипулирование строками в Bash

Манипулирование строками в сценариях bash

Манипулирование строками — одна из фундаментальных концепций сценариев bash. В программировании строки — это один из типов данных, представляющий собой упорядоченную последовательность символов. Важно знать, как создавать строки и манипулировать ими в bash. В этом руководстве мы изучим манипулирование строками в сценариях оболочки Bash на простых примерах. После прочтения этой статьи вы освоите работу со строками bash.

Назначение переменной

Строки можно присвоить переменной и позже использовать в скрипте для дальнейшей обработки. Например, я создаю переменную с именем "GREET_USER" и вывожу строку на терминал.

GREET_USER="Hello, Thanks for visiting OSTechnix"
echo "$GREET_USER"

Присвоение строки переменной

В Bash нет строгой системы типов, поэтому, если вы присвоите значение переменной, она будет рассматриваться как строковый тип. Вы можете создавать строки с одинарными, двойными кавычками или без них.

В bash есть разница между одинарными и двойными кавычками. Одинарные кавычки предотвращают расширение переменных и команд, тогда как двойные кавычки поддерживают его. Взгляните на приведенный ниже пример.

Я создал еще одну переменную с именем "SITE_NAME", и она используется в переменной "GREET_USER". В двойных кавычках переменная будет расширена, а в одинарных - не будет.

SITE_NAME="OSTechnix"
## DOUBLE QUOTES

GREET_USER="Hello, Thanks for visiting ${SITE_NAME}"
echo "$GREET_USER"

Использование двойных кавычек

SINGLE QUOTES
GREET_USER='Hello, Thanks for visiting ${SITE_NAME}'
echo "$GREET_USER"

Использование одинарных кавычек

Длина строки

Чтобы узнать длину строки, вы можете использовать символ #. Определение длины строки будет полезно в некоторых случаях, когда вам нужно написать некоторую логику, основанную на количестве строк.

echo "${#SITE_NAME}"

Длина строки

Преобразование строк в массив

Существует множество способов преобразования строкового типа данных в тип массива. Самый простой способ — заключить строку в фигурные скобки.

ARR_TYPE=($GREET_USER)
echo ${ARR_TYPE[@]}
for element in ${ARR_TYPE[@]}; do
  echo $element
done

Строка в массив

Второй метод — разделить строку и сохранить ее как массив на основе разделителя, используемого в строке. В предыдущем примере в качестве разделителя полей (IFS) используется пробел, который является IFS по умолчанию в bash. Например, если у вас есть строка, разделенная запятыми, вы можете установить IFS в виде запятой и создать массив. Более подробную информацию об IFS можно найти в следующем руководстве:

  • Скрипты Bash: циклы while и Until с примерами
STR_TO_ARR="column1,column2,column3"
IFS=","
ARR=(${STR_TO_ARR})
for element in ${ARR[@]}; do echo $element; done
echo "${ARR[@]}"

Пользовательский IFS — преобразование массива

Преобразование корпуса

Bash имеет встроенную поддержку преобразования регистра строк. Для преобразования регистра вам необходимо использовать специальные символы в конце строки, как показано ниже.

# SPECIAL CHARACTERS

,, ==> Converts an entire string to lowercase
^^ ==> Converts an entire string to Uppercase
~~ ==> Transpose Case
,  ==> Converts first letter alone to lowercase
^  ==> Converts first letter alone to uppercase
# ---- LOWER TO UPPER CASE ----
L_TO_U="welcome to ostechnix"
echo ${L_TO_U^^}


# ---- UPPER TO LOWER CASE ----
U_TO_L="WELCOME TO OSTECHNIX"
echo ${L_TO_U,,}


# ---- TRANSPOSE CASE ----
TRS_CASE="Welcome To OsTechnix"
echo ${TRS_CASE~~}


# ---- FIRST LETTER TO LOWERCASE ----
F_TO_L="OSTECHNIX"
echo ${F_TO_L,}


# ---- FIRST LETTER TO UPPERCASE ----
F_TO_U="ostechnix"
echo ${F_TO_U^}

Преобразование корпуса

Вы также можете использовать сопоставление шаблонов регулярных выражений и преобразовать регистр совпадений.

L_TO_U="welcome to ostechnix"
echo ${L_TO_U^^[toe]}

Сопоставление шаблонов регулярных выражений — преобразование регистра

Конкатенация строк

Вы можете объединить несколько строк, помещая их одну за другой. В зависимости от того, как объединены ваши строки, вы также можете добавить дополнительные символы.

SITE_NAME="OSTechnix"
MESSAGE="Welcome to"
echo "${MESSAGE} {SITE_NAME}"

Конкатенация строк

Нарезка строк

Нарезка строки — это способ извлечения части строки с использованием позиции индекса. Каждому символу в строке присваивается целочисленное значение, которое можно использовать для захвата части строки. Значение индекса находится в диапазоне от 0 до N. Ниже приведен синтаксис нарезки.

{STRING:START:LENGTH}

START => Starting Index Position
LENGTH => Length of the String from position START

Если LENGTH не указан, то строка будет напечатана до конца, начиная с позиции индекса START.

SITE_NAME="OSTechnix"
echo ${SITE_NAME:2}

Нарезка – от начала до конца

Если задана LENGTH, будет напечатана подстрока из позиции индекса START и количество символов, которые необходимо напечатать.

echo ${SITE_NAME:2:2}

Нарезка — начало и длина

Вы также можете перевернуть строку разными способами. Самый простой способ — использовать команду rev. Если вы хотите сделать это с помощью bash без использования какой-либо внешней команды, вам придется написать логику вручную.

echo ${SITE_NAME} | rev

Обратная строка

Искать и заменять

Существует собственный способ поиска и замены символов в строке без использования какой-либо внешней команды, например sed или awk .

Чтобы заменить первое вхождение подстроки, используйте следующий синтаксис.

{STRING/X/Y}
The first occurrence of X will be replaced by Y.

Взгляните на приведенный ниже пример, где первое вхождение слова "linux" заменяется на LINUX в верхнем регистре.

MESSAGE="linux is awesome to work with.
Ubuntu is one of the powerful linux distribution"
echo $MESSAGE
echo ${MESSAGE/linux/LINUX}

Заменить первое вхождение

Чтобы заменить все вхождения слова, используйте следующий синтаксис.

echo ${MESSAGE//linux/LINUX}

Заменить все вхождения

Удалить подстроку

Существуют разные способы удаления подстроки из строки. Внешние утилиты, такие как sed, awk или tr. > можно использовать или есть способ сделать это собственным способом bash.

В собственном способе bash расширение параметра используется для удаления подстроки. Вам необходимо использовать символ %, за которым следует шаблон для удаления. Это будет соответствовать последнему найденному шаблону и удалить его.

Например, я хочу удалить слова, которые идут после точки (.), следует использовать следующий синтаксис. Здесь все, что идет после точки (.), будет удалено. В этом случае последний совпавший шаблон .com удаляется.

SITE_NAME="www.ostechnix.com"
echo ${SITE_NAME%.*}

Удалить подстроку, используя символ %

Чтобы соответствовать первому вхождению шаблона, используйте символ двойной процент.

SITE_NAME="www.ostechnix.com"
echo ${SITE_NAME%%.*}

Удалить подстроку, используя символ %%

Вы также можете использовать символ # или ##, который будет выполнять своего рода обратное удаление. С помощью одного символа # сопоставляется первый шаблон, а все, что находится до него, удаляется.

SITE_NAME="www.ostechnix.com"
echo ${SITE_NAME#*.}

Удалить подстроку, используя символ #

При использовании двойного символа ## сопоставляется последний шаблон, а все, что находится до него, удаляется.

SITE_NAME="www.ostechnix.com"
echo ${SITE_NAME##*.}

Удалить подстроку, используя символ ##

Заключение

В этой статье мы увидели, как создавать строки в bash и различные способы манипулировать строками. Чтобы ознакомиться с манипуляциями со строками в bash, запустите терминал и начните практиковать примеры, представленные в этом руководстве. Если у вас есть какие-либо отзывы или вопросы, пожалуйста, используйте раздел комментариев ниже.

Руководства по написанию сценариев Bash:

  • Сценарии Bash: команда Printf с примерами
  • Скрипты Bash: индексированные массивы с примерами
  • Скрипты Bash: объяснение ассоциативных массивов на примерах
  • Скрипты Bash: цикл For с примерами
  • Перенаправление Bash, объясненное примерами
  • Сценарии Bash: переменные, поясняемые примерами
  • Скрипты Bash: функции, поясняемые примерами
  • Команда Bash Echo с примерами для Linux
  • Руководство по Bash Heredoc для начинающих

Статьи по данной тематике