Манипулирование строками в 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 для начинающих