Linux bash часть строки

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

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

Читайте также:  Manjaro linux как обновить систему

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

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

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

Начнем с получения длины строки в 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:

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

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

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

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

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

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

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

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

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

Читайте также:  Veracrypt mac os catalina

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

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

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

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

Источник

IgorKa — Информационный ресурс

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

Декабрь 2009
Пн Вт Ср Чт Пт Сб Вс
« Ноя Янв »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

Лекция №24 — bash работа со строками

Это последняя лекция посвященная изучению bash. Сегодня мы поговорим о работе со строками, а также обсудим команды и конструкции bash, которые были упущены в предыдущих лекциях. Сначала рассмотрим одну из таких важных конструкций, а затем перейдем к обработке строк.

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

Это точка, после которой обязательно следует пробел и далее путь к файлу. Не путайте это с вариантом без пробела — ./lib/lsb/init-functions. Точка с пробелом после которой следует путь к текстовому файлу позволяет загрузить текст этого файла в текущий скрипт. Данный механизм можно сравнить с командой include в языке С. Этот механизм имеет большое практическое применение. Например, можно описать часто употребляемые функции в отдельном файле, а далее пользоваться функциями в других скриптах. Этот же механизм используется и для создания конфигурационных файлов. Рассмотрим практический пример. Создадим файл с именем testopt и со следующим содержанием:

Затем создадим еще один файл-скрипт с именем printopt.sh в том же каталоге, что и файл testopt:

Когда интерпретатор bash начнет разбирать при запуске скрипт printopt.sh, то благодаря конструкции . testopt исполняемый файл будет для интерпретатора иметь следующий вид:

То есть на место . testopt подставляется содержимое (текст) файла testopt. Результат работы скрипта:

/ linux$ . / printopt.sh
PRINT

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

Рассмотрим несколько приемов обработки строк в bash. Допустим есть переменная А, которой присвоена строка “QWERTY“. Чтобы вывести содержимое переменной на экран достаточно написать echo $A:

/ linux$ A = «QWERTY» ; echo $A
QWERTY

Допустим хотим вывести такую строку — QWERTASD. Вариант $AASD не сработает, так как для bashAASD будет несуществующей переменной:

/ linux$ A = «QWERTY» ; echo $AASD

Поэтому записать следует так: $ASD:

Если необходимо отобразить строку с N-го символа, тогда используем конструкцию $ , где N — номер символа с которого будет отображена строка. Символы в строке ведут нумерацию с нуля. Чтобы отобразить ERTY пишем:

/ linux$ A = «QWERTY» ; echo $
ERTY

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

Можно отобразить определенное количество символов начинаю с определенной позиции. Тогда записать нужно так $ , где N — номер символа с которого будет отображена строка, а M — количество отображаемых символов. Чтобы вывести из нашей строки QWERTY символы ER пишем:

$ A = «QWERTY» ; echo $
ER

Чтобы вывести QWE пишем так:

$ A = «QWERTY» ; echo $
QWE

Рассмотрим вот такую конструкцию:

$ A = «ABABABCDCD» ; echo $
ABABCDCD
igor @ adm-ubuntu:

$ A = «123ABABABCDCD» ; echo $
123ABABABCDCD

После символа # указываем шаблон, и если начало строки совпадает с этим шаблоном, то строка будет выведена без символов удовлетворяющих шаблону. Строка “123ABABABCDCD” начинается с 12 и шаблон AB не сработал, а вот если написать #*AB (или #. AB), то получим следующий результат:

$ A = «123ABABABCDCD» ; echo $
ABABCDCD
igor @ adm-ubuntu:

$ A = «123ABABABCDCD» ; echo $
ABABCDCD

Посмотрите на результат выполнения такой команды:

$ A = «123ABABABCDCD» ; echo $
CDCD

Если у нас стоит один знак # то от строки отделяется минимум удовлетворяющий шаблону. То есть для “123ABABABCDCD” — это “123AB”. А если у нас два знака ##, то отделяется максимально возможная часть удовлетворяющая шаблону. То есть То есть для “123ABABABCDCD” — это “123ABABAB”, так как 123ABAB подходит под *.

Если необходимо таким же образом убрать символы начиная с конца строки, то вместо # используем %. Правила те же, что и для #.

$ A = «123ABABABCDCD» ; echo $
123ABAB
igor @ adm-ubuntu:

$ A = «123ABABABCDCD» ; echo $
123

Теперь посмотрим как в bash можно выполнять замену символов в строке. Допустим нужно в нашей строке “123ABABABCDCD” заменить символы AB на ZX, чтобы получилась строка “123ZXZXZXCDCD”. Для этого используем / или // и пишем так::

$ A = «123ABABABCDCD» ; echo $
123ZXABABCDCD
igor @ adm-ubuntu:

$ A = «123ABABABCDCD» ; echo $
123ZXZXZXCDCD

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

$ echo $options
YES
igor @ adm-ubuntu:

Команду $ следует понимать так: если переменная options не существует, значит необходимо создать ее и присвоить значение “YES”, а если переменная options существует, то используем ее истинное значение. В команде из последнего примера (строка 1), переменная options не существовала, поэтому она была создана и ей было присвоено значение YES, в следующей команде (строка 3), мы видим, что действительно переменная options была создана и ей было присвоено значение.
В следующей команде (строка 5) переменная options была создана со значением NO (то есть она существовала до команды echo $ ) и поэтому было выведено именно это значение (NO).

Если необходимо выполнить такую же операцию, но не присваивать значение переменной, то пишем вместо =, символ :

То есть, если переменная не существует, то она не создается, а вместо ее несуществующего значения используется указанное (в примере это “YES”). Данная конструкция работает если переменной не существует или она существует, но со значением нулевой длины.

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

$ options = «NO» ; echo $
YES
igor @ adm-ubuntu:

$ echo $options
NO

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

Команда read

Для некоторых видов скриптов (например инсталляционных), необходимо, чтобы пользователь вводил какие либо значения, и они могли быть использованы далее в скрипте. Для решения этой задачи в bash существует команда read. В простейшем случае команда записывается так: read P1 P2 …. PN, где P1 … PN — это имена параметров через пробел. Команда read считывает данные из потока ввода и записывает их в указанные переменные. В качестве разделителя для вводимых данных команда read использует значение которое хранится в системной переменой bashIFS. Как правило — это пробел или табуляция. Рассмотрим пример скрипта:

И результат выполнения:

/ linux$ . / hello.sh
Наберите ваши имя и фамилию через пробел и нажмите Enter:
Igor Kuzmenko
Ваше имя:Igor
Ваша фамилия:Kuzmenko

Если изменить 5-ю строку скрипта на echo “Ваша фамилия:$, то тогда, если не ввести фамилию будет выполнена подстановка указанного значения:

/ linux$ . / hello.sh
Наберите ваши имя и фамилию через пробел и нажмите Enter:
Игорь
Ваше имя:Игорь
Ваша фамилия:Фамилия отсутствовала

Команда read может выполняться с ключами. Наиболее значимые это:

-n — позволяет задать количество символов которое необходимо считать из потока ввода;
-t — позволяет задать количество секунд ожидания данных. Если пользователь ничего не ввел, то по истечении этого времени команда завершиться с ошибкой и скрипт будет выполнятся дальше.
-s — запрещает отображение вводимой информации на консоли. Используется для ввода конфиденциальной информации.

Справку о команде read можно получить из консоли по команде help read.

Источник

Читайте также:  Linux удалить все до определенной строки
Оцените статью