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

Основные приёмы обработки строк в bash

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

Термины

  • Консольные окружения — интерфейсы, в которых работа выполняется в текстовом режиме.
  • Интерфейс — механизм взаимодействия пользователя с аппаратной частью компьютера.
  • Оператор — элемент, задающий законченное действие над каким-либо объектом операционной системы (файлом, папкой, текстовой строкой и т. д.).
  • Текстовые массивы данных — совокупность строк, записанных в переменную или файл.
  • Переменная — поименованная область памяти, позволяющая осуществлять запись и чтение данных, которые в нее записываются. Она может принимать любые значения: числовые, строковые и т. д.
  • Потоковый текстовый редактор — программа, поддерживающая потоковую обработку текстовой информации в консольном режиме.
  • Регулярные выражения — формальный язык поиска части кода или фрагмента текста (в том числе строки) для дальнейших манипуляций над найденными объектами.
  • Bash-скрипты — файл с набором инструкций для выполнения каких-либо манипуляций над строкой, текстом или другими объектами операционной системы.

Сравнение строковых переменных

Для выполнения операций сопоставления 2 строк (str1 и str2) в ОС на основе UNIX применяются операторы сравнения.

Основные операторы сравнения

  1. Равенство « = »: оператор возвращает значение «истина» («TRUE»), если количество символов в строке соответствует количеству во второй.
  2. Сравнение строк на эквивалентность « == »: возвращается «TRUE», если первая строка эквивалентна второй ( дом == дом ).
  3. Неравенство «str1 != str2»: «TRUE», если одна строковая переменная не равна другой по количеству символов.
  4. Неэквивалентность «str1 !== str2»: «TRUE», если одна строковая переменная не равна другой по смысловому значению ( дерево !== огонь ).
  5. Первая строка больше второй «str1 > str2»: «TRUE», когда str1 больше str2 по алфавитному порядку. Например, « дерево > огонь » , поскольку литера «д» находится ближе к алфавитному ряду, чем «о».
  6. Первая строка меньше второй «str1 str2»: «TRUE», когда str1 меньше str2 по алфавитному порядку. Например, « огонь < дерево », поскольку «о» находится дальше к началу алфавитного ряда, чем «д».
  7. Длина строки равна 0 « -z str2»: при выполнении этого условия возвращается «TRUE».
  8. Длина строки отлична от нулевого значения « -n str2»: «TRUE», если условие выполняется.

Пример скрипта для сравнения двух строковых переменных

Строки в bash - скрип

  1. Чтобы сравнить две строки, нужно написать bash-скрипт с именем test .
  2. Далее необходимо открыть терминал и запустить test на выполнение командой:

Строки в bash - скрипт

Создание тестового файла

Обработка строк не является единственной особенностью консольных окружений Ubuntu. В них можно обрабатывать текстовые массивы данных.

  1. Для практического изучения команд, с помощью которых выполняется работа с текстом в интерпретаторе bash, необходимо создать текстовый файл txt .
  2. После этого нужно наполнить его произвольным текстом, разделив его на строки. Новая строка не должна сливаться с другими элементами.
  3. Далее нужно перейти в директорию, в которой находится файл, и запустить терминал с помощью сочетания клавиш — Ctrl+Alt+T.

Основы работы с grep

Поиск строки в файле операционной системы Linux Ubuntu осуществляется посредством специальной утилиты — grep . Она позволяет также отфильтровать вывод информации в консоли. Например, вывести все ошибки из log-файла утилиты ps или найти PID определенного процесса в ее отчете.

Команда grep работает с шаблонами и регулярными выражениями. Кроме того, она применяется с другими командами интерпретатора bash.

Синтаксис команды

Для работы с утилитой grep необходимо придерживаться определенного синтаксиса

  1. grep [options] pattern [file_name1 file_name2 file_nameN] (где «options» — дополнительные параметры для указания настроек поиска и вывода результата; «pattern» — шаблон, представляющий строку поиска или регулярное выражение, по которым будет осуществляться поиск; «file_name1 file_name2 file_nameN» — имя одного или нескольких файлов, в которых производится поиск).
  2. instruction | grep [options] pattern (где «instruction» — команда интерпретатора bash, «options» — дополнительные параметры для указания настроек поиска и вывода результата, «pattern» — шаблон, представляющий строку поиска или регулярное выражение, по которым будет производиться поиск).

Строки в bash - синтаксис

Основные опции

  • Отобразить в консоли номер блока перед строкой — -b .
  • Число вхождений шаблона строки — .
  • Не выводить имя файла в результатах поиска — -h .
  • Без учета регистра — -i .
  • Отобразить только имена файлов с совпадением строки — -l .
  • Показать номер строки — -n .
  • Игнорировать сообщения об ошибках — -s .
  • Инверсия поиска (отображение всех строк, в которых не найден шаблон) — -v .
  • Слово, окруженное пробелами, — -w .
  • Включить регулярные выражения при поиске — -e .
  • Отобразить вхождение и N строк до и после него — -An и -Bn соответственно.
  • Показать строки до и после вхождения — -Cn .

Практическое применение grep

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

Строки в bash - grep

В окне терминала выводятся все строки, содержащие подстроку. Найденные совпадения подсвечиваются другим цветом.

Вывод нескольких строк

Чтение строки из файла с использованием регулярных выражений

Регулярные выражения расширяют возможности поиска и позволяют выполнить разбор строки на отдельные элементы. Они активируются при помощи ключа -e.

Строки в bash - grep

    Вывод строки, в начале которой встречается слово «Фамилия».
    В регулярных выражения для обозначения начала строки используется специальный символ «^».

grep "^Фамилия" firstfile.txt

Строки в bash - grep

  • Конец строки, заканчивающийся словом «оболочка».Для обозначения конца строки используется мета-символ «$».
    grep «оболочка$» firstfile.txt Если требуется вывести символ конца строки, то следует применять конструкцию
    grep «а.$» firstfile.txt . В этом случае будут выведены все строки, заканчивающиеся на литеру «а».
  • Строки, содержащие числа.

    Если воспользоваться числовыми интервалами, то можно вывести все строки, в которых встречаются числа:

    Рекурсивный режим поиска

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

    Точное вхождение

    При поиске союза «и» grep будет выводить все строки, в которых он содержится. Чтобы этого избежать, требуется использовать специальный ключ « w »:

    Поиск нескольких слов

    Утилита «w» позволяет искать не только одно слово, но и несколько одновременно

    grep -w "и | но" firstfile.txt

    Количество строк в файле

    При помощи grep можно определить число вхождений строки или подстроки в текстовом файле и вывести ее номер.

    Строки в bash - grep

    Если в тексте требуется найти определенные строки, которые не содержат какого-либо слова или подстроки, то рекомендуется использовать инверсионный режим поиска.

    Вывод только имени файла

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

    Использование sed

    Потоковый текстовый редактор « sed » встроен в bash Linux Ubuntu. Он использует построчное чтение, а также позволяет выполнить фильтрацию и преобразование текста.

    Синтаксис

    Для работы с потоковым текстовым редактором sed используется следующий синтаксис:

    sed [options] instructions [file_name] (где «options» — ключи-опции для указания метода обработки текста, «instructions» — команда, совершаемая над найденным фрагментом текста, «file_name» — имя файла, над которым совершаются действия).

    Строки в bash - sed help

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

    Распространенные конструкции с sed

    Замена слова

    Например, если требуется заменить строку в файле или слово с «команды» на «инструкции». Для этого нужно воспользоваться следующими конструкциями:

    sed 's/команды/инструкции/' firstfile.txt

    Строки в bash - замена первого вхождения

    Для всех вхождений (используется параметр инструкции — g ):

    sed 's/команды/инструкции/g' firstfile.txt
    sed -e 's/команды/инструкции/g' -e 's/команд/инструкций/g' firstfile.txt
    sed '/POSIX/s/Bash/оболочка/g' firstfile.txt
    sed '/^Bash/s/Bash/оболочка/g' firstfile.txt
    sed '/команды/s/Bash/оболочка/g' firstfile.txt
    sed 's/Bash\ /оболочка-/g' firstfile.txt

    Редактирование файла

    Чтобы записать строку в файл, нужно указать параметр замены одной строки на другую, воспользовавшись ключом — -i :

    sed -i 's/команды/инструкции/' firstfile.txt

    После выполнения команды произойдет замена слова «команды» на «инструкции» с последующим сохранением файла.

    Удаление строк из файла

    Нумерация строк

    Строки в файле будут пронумерованы следующим образом: первая строка — 1, вторая — 2 и т. д.

    Строки в bash - нумерация строк

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

    sed = firstfile.txt | sed 'N;s/\n/\t/'

    Удаление всех чисел из текста

    sed -i 's/\[0-9\] \ [0-9\]//g' firstfile.txt

    Замена символов

    Чтобы заменить набор символов, нужно воспользоваться инструкцией, содержащей команду « y »:

    sed 'y/1978/1977/g' firstfile.txt

    Обработка указанной строки

    Утилита производит манипуляции не только с текстом, но и со строкой, указанной в правиле шаблона (3 строка):

    sed '3s/директорий/папок' firstfile.txt

    Работа с диапазоном строк

    Для выполнения замены только в 3 и 4 строках нужно использовать конструкцию:

    sed '3,4s/директорий/папок' firstfile.txt

    Вставка содержимого файла после строки

    Иногда требуется вставить содержимое одного файла (input_file.txt) после определенной строки другого (firstfile.txt). Для этой цели используется команда:
    sed ‘5r input_file.txt’ firstfile.txt (где «5r» — 5 строка, «input_file.txt» — исходный файл и «firstfile.txt» — файл, в который требуется вставить массив текста).

    Надежный хостинг для сайта. 14 дней — бесплатно!

    Источник

    Читайте также:  Linux how to uninstall package
  • Оцените статью
    Adblock
    detector