Поиск по сайту:
Тупой ум восходит к истине через материальное (Сюгер).

Строковые операции в Bash

06.08.2020
Bash Heredoc

Давайте поработаем со строками!

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

Но это не значит, что у вас нет функций манипулирования строками.

На этой неделе вы узнаете, как управлять строками, используя различные строковые операции. Вы узнаете, как получить длину строки, объединить строки, извлечь подстроки, заменить подстроки и многое другое!

 

Получить длину строки

Начнем с получения длины строки в bash.

Строка — это не что иное, как последовательность (массив) символов. Создадим строку с именем distro и инициализируем ее значением «Ubuntu».

distro="Ubuntu"

 

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

Excelent@andreyex:~/scripts$ echo ${#distro}
6

 

Обратите внимание, что команда echo предназначена для печати значения {#string} это то, что дает длину строки.

 

Соединение двух строк

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

Для демонстрации давайте сначала создадим две строки str1 и str2 следующим образом:

str1="And"
str2="reyEx"

 

Теперь вы можете объединить обе строки и присвоить результат новой строке с именем str3 следующим образом:

str3=$str1$str2

 

Не может быть проще, не так ли?

 

Поиск подстрок

Вы можете найти позицию (индекс) конкретной буквы или слова в строке. Для демонстрации давайте сначала создадим строку с именем str следующим образом:

str="Bash is Cool"

 

Читать  Максимальное использование справочных страниц в Linux

Теперь вы можете получить конкретную позицию (индекс) подстроки cool. Для этого используйте команду expr:

Excelent@andreyex:~/scripts$ word="Cool"
Excelent@andreyex:~/scripts$ expr index "$str" "$word"
9

Результат 9 — это индекс, с которого начинается слово «Cool» в строке str.

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

 

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

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

Для демонстрации давайте сначала создадим строку с именем foss следующим образом:

foss="Fedora is a free operating system"

 

Теперь предположим, что вы хотите извлечь первое слово «Fedora» в строке foss. Вам необходимо указать начальную позицию (индекс) желаемой подстроки и количество символов, которые вам нужно извлечь.

Следовательно, чтобы извлечь подстроку «Fedora», вы будете использовать 0 в качестве начальной позиции, и вы извлечете 6 символов из начальной позиции:

Excelent@andreyex:~/scripts$ echo ${foss:0:6}
Fedora

 

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

Например, чтобы извлечь подстроку «свободная операционная система» из строки foss ; нам нужно только указать начальную позицию 12:

Excelent@andreyex:~/scripts$ echo ${foss:12}
free operating system

 

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

Вы также можете заменить подстроку другой подстрокой; например, вы можете заменить «Fedora» на «Ubuntu» в строке foss следующим образом:

Excelent@andreyex:~/scripts$ echo ${foss/Fedora/Ubuntu}
Ubuntu is a free operating system

 

Читать  Настройка Linux-шлюза/маршрутизатора, руководство для не сетевых администраторов. Часть 3

Давайте рассмотрим другой пример, давайте заменим подстроку «бесплатно» на «популярные»:

Excelent@andreyex:~/scripts$ echo ${foss/free/popular}
Fedora is a popular operating system

 

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

 

Удаление подстрок

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

fact="Sun is a big star"

 

Теперь вы можете удалить подстроку big из строки fact:

Excelent@andreyex:~/scripts$ echo ${fact/big}
Sun is a star

 

Создадим еще одну строку с именем cell:

cell="112-358-1321"

 

Теперь предположим, что вы хотите удалить все тире из строки ячейки; следующий оператор удалит только первое вхождение тире в строке ячейки:

Excelent@andreyex:~/scripts$ echo ${cell/-}
112358-1321

 

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

Excelent@andreyex:~/scripts$ echo ${cell//-}
1123581321

 

Обратите внимание, что вы используете эхо-операторы, поэтому строка ячейки не повреждена и не изменена; вы просто демонстрируете желаемый результат!

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

Excelent@andreyex:~/scripts$ echo $cell
112-358-1321
Excelent@andreyex:~/scripts$ cell=${cell//-}
Excelent@andreyex:~/scripts$ echo $cell
1123581321

 

Преобразование прописных и строчных букв в строку

Вы также можете преобразовать строку в строчные или прописные буквы. Сначала создадим две строки с именами легенда и актер:

legend="john nash"
actor="JULIA ROBERTS"

 

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

Excelent@andreyex:~/scripts$ echo ${legend^^}
JOHN NASH

 

Вы также можете преобразовать все буквы в строке актера в нижний регистр:

Excelent@andreyex:~/scripts$ echo ${actor,,}
julia roberts

 

Читать  Как заменить последнее вхождение с помощью sed

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

Excelent@andreyex:~/scripts$ echo ${legend^}
John nash

 

Точно так же вы можете преобразовать только первый символ строки актера в нижний регистр следующим образом:

Excelent@andreyex:~/scripts$ echo ${actor,}
jULIA ROBERTS

 

Вы также можете изменить некоторые символы в строке на верхний или нижний регистр; например, вы можете изменить буквы jи nна верхний регистр в строке легенды следующим образом:

Excelent@andreyex:~/scripts$ echo ${legend^^[jn]}
JohN Nash

 

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (3 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:


0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Рекомендуемое
Для одного из наших клиентов нашей команде понадобился статический IP-адрес…

Спасибо!

Теперь редакторы в курсе.