9.2. Работа со строками
Bash поддерживает на удивление большое количество операций над строками. К сожалению, этот раздел Bash испытывает недостаток унификации. Одни операции являются подмножеством операций подстановки параметров, а другие — совпадают с функциональностью команды UNIX — expr. Это приводит к противоречиям в синтаксисе команд и перекрытию функциональных возможностей, не говоря уже о возникающей путанице.
Длина строки
$ <#string>expr length $string expr «$string» : ‘.*’
Пример 9-10. Вставка пустых строк между параграфами в текстовом файле
Длина подстроки в строке (подсчет совпадающих символов ведется с начала строки)
expr match «$string» ‘$substring’
expr «$string» : ‘$substring’
где $substring — регулярное выражение.
Index
expr index $string $substring
Номер позиции первого совпадения в $string c первым символом в $substring.
Эта функция довольно близка к функции strchr() в языке C.
Извлечение подстроки
Извлекает подстроку из $string, начиная с позиции $position.
Если строка $string — » * » или » @ » , то извлекается позиционный параметр (аргумент), [1] с номером $position.
Извлекает $length символов из $string, начиная с позиции $position.
Если $string — » * » или » @ » , то извлекается до $length позиционных параметров (аргументов), начиная с $position.
expr substr $string $position $length
Извлекает $length символов из $string, начиная с позиции $position.
expr match «$string» ‘\($substring\)’
Находит и извлекает первое совпадение $substring в $string, где $substring — это регулярное выражение.
expr «$string» : ‘\($substring\)’
Находит и извлекает первое совпадение $substring в $string, где $substring — это регулярное выражение.
expr match «$string» ‘.*\($substring\)’
Находит и извлекает первое совпадение $substring в $string, где $substring — это регулярное выражение. Поиск начинается с конца $string.
expr «$string» : ‘.*\($substring\)’
Находит и извлекает первое совпадение $substring в $string, где $substring — это регулярное выражение. Поиск начинается с конца $string.
Удаление части строки
Удаление самой короткой, из найденных, подстроки $substring в строке $string. Поиск ведется с начала строки
Удаление самой длинной, из найденных, подстроки $substring в строке $string. Поиск ведется с начала строки
Удаление самой короткой, из найденных, подстроки $substring в строке $string. Поиск ведется с конца строки
Удаление самой длинной, из найденных, подстроки $substring в строке $string. Поиск ведется с конца строки
Пример 9-11. Преобразование графических файлов из одного формата в другой, с изменением имени файла
Замена подстроки
Замещает первое вхождение $substring строкой $replacement.
Замещает все вхождения $substring строкой $replacement.
Подстановка строки $replacement вместо $substring. Поиск ведется с начала строки $string.
Подстановка строки $replacement вместо $substring. Поиск ведется с конца строки $string.
9.2.1. Использование awk при работе со строками
В качестве альтернативы, Bash-скрипты могут использовать средства awk при работе со строками.
Пример 9-12. Альтернативный способ извлечения подстрок
9.2.2. Дальнейшее обсуждение
Дополнительную информацию, по работе со строками, вы найдете в разделе Section 9.3 и в секции, посвященной команде expr. Примеры сценариев:
Как проверить, содержит ли строка подстроку в Bash
Главное меню » Операционная система Linux » Как проверить, содержит ли строка подстроку в Bash
В этой статье мы покажем вам несколько способов проверить, содержит ли строка подстроку.
Использование подстановочных знаков
Самый простой подход заключается в том, чтобы окружить подстроку подстановочными символами звездочки (звездочкой) * и сравнить ее со строкой. Подстановочный знак – это символ, используемый для обозначения нуля, одного или нескольких символов.
Если тест возвращается true, подстрока содержится в строке.
В приведенном ниже примере мы используем оператор if и оператор равенства ( =, чтобы проверить SUB, найдена ли подстрока в строке STR:
После выполнения скрипт выдаст:
Использование оператора case
Вместо использования оператора if вы также можете использовать оператор case, чтобы проверить, содержит ли строка другую строку.
Использование оператора регулярных выражений
Другим вариантом определения того, встречается ли указанная подстрока в строке, является использование оператора регулярного выражения =
. Когда используется этот оператор, правильная строка рассматривается как регулярное выражение.
Точка, за которой следует звездочка .* соответствует нулю или большему количеству вхождений любого символа, кроме символа новой строки.
Скрипт отобразит следующее:
Использование Grep
Команда grep также может использоваться для поиска строк в другой строке.
В следующем примере мы передаем строку $STR в качестве входных данных для grep и проверяем $SUB, найдена ли строка во входной строке. Команда вернет true или false при необходимости.
Опция -q говорит Grep, чтобы быть спокойным и пропустить выход.
Заключение
Проверка, содержит ли строка подстроку, является одной из самых основных и часто используемых операций в сценариях Bash.
Прочитав эту статью, вы должны хорошо понимать, как проверить, содержит ли строка другую строку. Вы также можете использовать другие команды, такие как команда awk или sed для тестирования.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Как в Bash проверить, содержит ли строка подстроку
Как в Bash можно протестировать, содержит ли она другую строку?
Рассмотрим сразу несколько вариантов, с использованием различных программ: какие-то будут быстрее или медленнее, какие-то решения будут работать только в Bash, а некоторые в любой оболочке Linux.
Вариант с обрамлением строки подстановочными символами:
Обратите внимание, что пробелы в искомой подстроке должны быть заключены в двойные кавычки, а звёздочки должны быть снаружи — в точности как на примере. Также обратите внимание, что используется простое сравнение (то есть ==), а не оператор регулярных выражений (то есть не =
Также не забывайте делать пробелы до и после квадратных скобок.
Если поменять строки местами, то для проверки поменяйте == на != и результат будет точно таким же.
Вариант с регулярными выражениями
Чтобы проверить, что строка НЕ содержит подстроку:
Пример выше вернёт true.
Похожего эффекта можно добиться и с выражением case:
Это решение является портативным на оболочки posix (то есть это не башизм).
Следующая функция возвращает True или False в зависимости от того, содержит ли одна строка другую или нет. То есть эту
Пример, когда подстрока не найдена:
Вы должны помнить, что сценарии оболочки — это не столько язык, сколько набор команд. Инстинктивно вы думаете, что этот «язык» требует, чтобы за if следовало [ или [[ с помощью которых выполняется тестирование. Обе они являются просто командами, которые возвращают состояние выхода, указывающее на успех или неудачу (как и любая другая команда). По этой причине я бы использовал grep, а не команду [.
Теперь, когда вы воспринимаете if как тестирование статуса выхода команды, которая следует за ним (завершена точкой с запятой), почему бы не пересмотреть источник строки, которую вы тестируете?
Опция -q делает так, что grep ничего не выводит поскольку мы только хотим только код возврата
4 мин для чтения Строковые операции в Bash
Главное меню » Linux » Строковые операции в Bash
Если вы знакомы с переменными в bash, вы уже знаете, что не существует отдельных типов данных для строк, int и т. д. Все является переменной.
Но это не значит, что у вас нет функций манипулирования строками.
На этой неделе вы узнаете, как управлять строками, используя различные строковые операции. Вы узнаете, как получить длину строки, объединить строки, извлечь подстроки, заменить подстроки и многое другое!
Получить длину строки
Начнем с получения длины строки в bash.
Строка – это не что иное, как последовательность (массив) символов. Создадим строку с именем distro и инициализируем ее значением «Ubuntu».
Теперь, чтобы получить длину строки дистрибутива, вам просто нужно добавить #перед именем переменной. Вы можете использовать следующий оператор эха:
Обратите внимание, что команда echo предназначена для печати значения <#string>это то, что дает длину строки.
Соединение двух строк
Вы можете добавить строку в конец другой строки; этот процесс называется конкатенацией строк.
Для демонстрации давайте сначала создадим две строки str1 и str2 следующим образом:
Теперь вы можете объединить обе строки и присвоить результат новой строке с именем str3 следующим образом:
Не может быть проще, не так ли?
Поиск подстрок
Вы можете найти позицию (индекс) конкретной буквы или слова в строке. Для демонстрации давайте сначала создадим строку с именем str следующим образом:
Теперь вы можете получить конкретную позицию (индекс) подстроки cool. Для этого используйте команду expr:
Результат 9 – это индекс, с которого начинается слово «Cool» в строке str.
Мы сознательно избегаем использования условных операторов, таких как if, else, потому что в этой серии статей для начинающих bash условные операторы будут рассмотрены позже.
Извлечение подстрок
Вы также можете извлекать подстроки из строки; другими словами, вы можете извлечь букву, слово или несколько слов из строки.
Для демонстрации давайте сначала создадим строку с именем foss следующим образом:
Теперь предположим, что вы хотите извлечь первое слово «Fedora» в строке foss. Вам необходимо указать начальную позицию (индекс) желаемой подстроки и количество символов, которые вам нужно извлечь.
Следовательно, чтобы извлечь подстроку «Fedora», вы будете использовать 0 в качестве начальной позиции, и вы извлечете 6 символов из начальной позиции:
Обратите внимание, что первая позиция в строке равна нулю, как и в случае с массивами в bash. Вы также можете указать только начальную позицию подстроки и опустить количество символов. В этом случае будет извлечено все, от начальной позиции до конца строки.
Например, чтобы извлечь подстроку «свободная операционная система» из строки foss ; нам нужно только указать начальную позицию 12:
Замена подстрок
Вы также можете заменить подстроку другой подстрокой; например, вы можете заменить «Fedora» на «Ubuntu» в строке foss следующим образом:
Давайте рассмотрим другой пример, давайте заменим подстроку «бесплатно» на «популярные»:
Поскольку вы просто печатаете значение с помощью команды echo, исходная строка не изменяется.
Удаление подстрок
Вы также можете удалить подстроки. Чтобы продемонстрировать, давайте сначала создадим строку с именем fact следующим образом:
Теперь вы можете удалить подстроку big из строки fact:
Создадим еще одну строку с именем cell:
Теперь предположим, что вы хотите удалить все тире из строки ячейки; следующий оператор удалит только первое вхождение тире в строке ячейки:
Чтобы удалить все дефисы из строки ячейки , вы должны использовать двойную косую черту следующим образом:
Обратите внимание, что вы используете эхо-операторы, поэтому строка ячейки не повреждена и не изменена; вы просто демонстрируете желаемый результат!
Чтобы изменить строку, вам нужно вернуть результат в строку следующим образом:
Преобразование прописных и строчных букв в строку
Вы также можете преобразовать строку в строчные или прописные буквы. Сначала создадим две строки с именами легенда и актер:
Вы можете преобразовать все буквы в строке легенды в верхний регистр:
Вы также можете преобразовать все буквы в строке актера в нижний регистр:
Вы также можете преобразовать только первый символ строки легенды в верхний регистр следующим образом:
Точно так же вы можете преобразовать только первый символ строки актера в нижний регистр следующим образом:
Вы также можете изменить некоторые символы в строке на верхний или нижний регистр; например, вы можете изменить буквы jи nна верхний регистр в строке легенды следующим образом:
На этом мы подошли к концу этой статьи из серии bash для начинающих. Надеюсь, вам понравилось манипулировать строками в bash.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.