training-web.ruГлавнаяКатегорииО насКарта сайтаПоискТёмная тема

Категории

Работа со строками string bash

Создано: 29 мая 2017Автор: Егор Астапов5582 просмотраСложность: легкий

Допустим у вас есть переменная str. В этой переменной некий текст в виде строки. Как вывести несколько символов из строки? Выводить текст при помощи цикла - это довольно долгое занятие. Поможет простая конструкция {?}. Вы можете вывести часть строки, передав параметр ${str:?}. Вместо ? поставьте индекс позиции символа. ${str:начало:конец} тут вы можете вывести значения согласно выбранному интервалу. Посмотрите на пример.


#!/bin/bash
str=abcABC123ABCabc
# 0123456789.....# Индексация начинается с 0.
echo ${str:0} # abcABC123ABCabc
echo ${str:1} # bcABC123ABCabc
echo ${str:7} # 23ABCabc
echo ${str:7:3} # 23A # Извлекает 3 символа.
# Возможна ли индексация с "правой" стороны строки?

echo ${str:-4} # abcABC123ABCabc
# По-умолчанию выводится полная строка.
# Однако . . .echo ${str:(-4)} # Cabc

echo ${str: -4} # Cabc
# Теперь выводится правильно.
# Круглые скобки или дополнительный пробел "экранируют" параметр позиции.

Как определить позицию индекс строки? Посмотрите на пример. expr - универсальный обработчик выражений: вычисляет заданное выражение (аргументы должны отделяться пробелами). Выражения могут быть логическими, арифметическими или строковыми.


#!/bin/bash
str=abcABC123ABCabc

echo `expr index "$str" C12` 
#вывод: 6 
# позиция символа C.

echo `expr index "$str" 1c` 
#вывод: 3
# символ 'c' (в #3 позиции) совпал раньше, чем '1'.

#количество символов в строке
echo ${#str} # 15
echo `expr length $str` # 15
echo `expr "$str" : '.*'` # 15

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


#!/bin/bash
str=abcABC123ABCabc

echo `expr match "$str" '\(.[b-c]*[A-Z]..[0-9]\)'` # abcABC1
echo `expr "$str" : '\(.[b-c]*[A-Z]..[0-9]\)'` # abcABC1
echo `expr "$str" : '\(.......\)'` # abcABC1

Комментарии

реклама