Bash-скрипты — подстрока

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

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

Извлечение подстроки на основе индекса

Существуют различные способы получения подстроки на основе индекса символов в строке:

  • Использование команды « Вырезать »
  • Использование подстроки Bash
  • С использованием команда expr substr
  • Использование awk-команды

Способ 1: Использование команды «Вырезать»

Команда Cut используется для выполнения операции нарезки для получения желаемого результата.

Синтаксис:

cut [option] range [string/filename]

Опция -c используется для вырезания строки по символу. Необходимо указать список или диапазон номеров символов, иначе выдает ошибку с этой опцией. В диапазоне укажите диапазон индексов оригинала, чтобы получить подстроку. Он использует систему индексов на основе 1 (индексация начинается с 1) .

Пример 1: В демонстрационных целях давайте извлечем последние 0 символа из строки '01010string'.

Код:

cut -c 6-11<<< "01010string"

<<< известен как здесь-строка. Используя это, можно передать готовую строку текста в программу. Мы указали диапазон от 6 до 11, потому что 6 — это начальный индекс, а 11 — конечный индекс желаемого результата.

Выход:

Пример 2: Теперь извлеките символы перед «s» в строке «01010string».

Код:

cut -c 1-5<<< "01010string"

Мы указали диапазон от 1 до 5, потому что 1 — это начальный индекс, а 5 — конечный индекс желаемого результата.

Выход:

Способ 2: подстрока Bash (без использования внешней команды)

Синтаксис:

${VAR:start_index:length}

Он использует систему индексов на основе 0 .

Пример 1: Для демонстрации мы извлечем подстроку из строки «Меня зовут РОМИ» с индекса 11 по индекс 15. Для индекса с 11 по 15 длина подстроки станет равной 4.

Код:

STR="My name is ROMY"
echo ${STR:11:4}

Выход:

Пример 2. Извлеките строку перед индексом 10. Поскольку этот метод использует систему индексов на основе 0, длина желаемой строки будет равна 10.

Код:

STR="My name is ROMY"
echo ${STR:0:10}

Выход:

Способ 3: Использование команды expr

Используется для выполнения:

  • сложение, вычитание, умножение, деление и модульные операции.
  • Оценка регулярных выражений, строковые операции, такие как подстрока.

Он использует систему индексов на основе 1 .

Пример 1: Для демонстрации мы извлечем подстроку из строки «Меня зовут РОМИ» от индекса 12 до индекса 16. Для индекса от 12 до 16 длина подстроки станет равной 4.

Синтаксис:

expr substr <input_string> <start_index> <length>

Код:

expr substr "My name is ROMY" 12 4

Выход:

Пример 2. Извлечение подстроки от начала строки до индекса 10. Поскольку этот метод использует систему индексов на основе 1, длина строки до индекса 10 равна 9.

Код:

expr substr "My name is ROMY" 1 9

Выход:

Способ 4: использование команды awk

Это язык сценариев, используемый для управления данными. Он не требует компиляции и допускает строковые функции, переменные и т. д. Он имеет встроенную функцию substr(), которую можно использовать непосредственно для получения подстроки.

Функция substr(s, i, n) принимает три аргумента.

  • s : входная строка
  • i : начальный индекс подстроки
  • n : длина подстроки.

Он использует систему индексов на основе 1 .

Синтаксис:

awk "{print substr($var,start_index, length)}"

Пример 1: извлечь подстроку длины 5, начиная с индекса 12.

Код:

awk "{print substr($0, 12, 5)}" <<< "My name is ROMY"

Выход:

Пример 2: извлечь строку длиной 10, начиная с индекса 1.

Код:

awk "{print substr($0, 1, 10)}" <<< "My name is ROMY"

Выход:

Извлечение подстроки на основе шаблона

Существуют различные способы получения подстроки на основе шаблонов строки:

  • с помощью команды вырезания
  • с помощью awk-команды

Способ 1: Использование команды «Вырезать»

Для демонстрации возьмем входные строки как значения, разделенные запятыми: «Romy, Pushkar, Kareena, Katrina». Опция (-d ,) должна использоваться с командой cut, чтобы сообщить команде, что входная строка представляет собой значения, разделенные запятыми. Параметр -f указывает команде cut извлекать строку на основе поля, например (-f 3) для третьего поля в строке.

Синтаксис:

cut [option] field_position <<< "comma_seperated_string"

Код:

cut -d, -f 3 <<< “Romy,Pushkar,Kareena,Katrina”.

Это извлечет третье поле.

Выход:

Способ 2: с помощью команды awk

Синтаксис:

awk [option] field_separator ‘{print $field_position}’ <<< “input_string”

Код:

Чтобы извлечь третье поле из строки

awk -F’,’ ‘{print $1}’ <<< “Romy,Pushkar,Kareena,Katrina”

Выход:

Различный регистр подстроки на основе шаблона

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

В этом методе мы увидим метод получения подстроки, лежащей между двумя шаблонами в строке. Эту проблему можно решить с помощью команды awk.

  • sub(/.*start/, "") — удаляет все перед началом до 'start'.
  • sub(/end.*/, «») — удаляет все из «конца» вместе с концом.

Синтаксис:

awk ‘{ sub(/.*BEGIN:/, “”); sub(/END:.*/, “”); print }’ <<< “input_string”

Код:

STR="Hello!! My name is ROMY kumari"
awk "{ sub(/.*!!/, ""); sub(/kumari.*/, ""); print }" <<< "$STR"

Выход: