January 6

Подстроки в Bash: извлечение и обработка

Bash предоставляет встроенные методы для извлечения и обработки подстрок, что упрощает обработку строк без использования внешних инструментов.

В этой статье расскажу о синтаксисе ${variable:offset:length} для извлечения подстрок и рассмотрим расширенные методы манипулирования строками.

Извлечение подстрок с помощью${variable:offset:length}

Синтаксис ${variable:offset:length}— это простой и эффективный способ извлечения части строки.

Синтаксис:

${variable:offset:length}
  • variable: Строковая переменная.
  • offset: Начальная позиция подстроки (индекс, начинающийся с 0).
  • length: Количество извлекаемых символов.

Пример 1: Базовое извлечение подстроки

string="Hello, World!"
echo ${string:7:5} # Вывод: World

Пример 2: Извлечение из фиксированного положения

string="Welcome to Bash scripting"
echo ${string:11} # Вывод: Bash scripting

Пример 3: Использование отрицательных индексов

Отрицательные индексы подсчитывают символы с конца строки.

string="Bash Substring Example"
echo ${string: -7:7} # Вывод: Example

Такой синтаксис устраняет необходимость во внешних инструментах, таких как cutили awkдля большинства простых задач.

Расширенная обработка подстрок

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

Удаление префикса или суффикса

Чтобы удалить известный префикс из строки:

string="prefix_value"
echo ${string#prefix_} # Вывод: value

Чтобы удалить известный суффикс из строки:

string="value_suffix"
echo ${string%suffix} # Вывод: value

Замена подстрок

Bash может заменять части строки другим значением.

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

string="SocketDaddy Substring Guide"
echo ${string/Substring/Tutorial} # Вывод: SocketDaddy Tutorial Guide

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

string="abc abc abc"
echo ${string//abc/xyz} # Вывод: xyz xyz xyz

Использование регулярных выражений с[[ ]]

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

Пример: извлечение номера версии:

string="Version 1.2.3"
if [[ $string =~ ([0-9]+\.[0-9]+\.[0-9]+) ]]; then
  echo "Matched version: ${BASH_REMATCH[1]}"  # Вывод: 1.2.3
fi

На этом все! Спасибо за внимание! Если статья была интересна, подпишитесь на телеграм-канал usr_bin, где будет еще больше полезной информации.