Давайте поработаем со строками!
Если вы знакомы с переменными в 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"
Теперь вы можете получить конкретную позицию (индекс) подстроки 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
Давайте рассмотрим другой пример, давайте заменим подстроку «бесплатно» на «популярные»:
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
Вы также можете преобразовать только первый символ строки легенды в верхний регистр следующим образом:
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.