Вы находитесь на странице: 1из 16

Министерство Образования, Культуры и Исследований

Молдавский Государственный Университет


Факультет Математики и Информатики
Департамент Информатики

Лабораторная работа №6
Тема: Примеры использования функции grep в
Linux, регулярные выражения.
По курсу “Операционные системы.”

Выполнил: студент группы I2002_2


Чернова Алина
Проверил преподаватель:
Аурелия Припелицэ

Кишинев, 2020
Part 1. Примеры использования функции grep в Linux, регулярные
выражения.

Определение регулярных выражений 

Регулярные выражения представляют собой одно из наиболее


интересных и полезных свойств операционной системы Unix.
Регулярные выражения являются языком описания текстовых
шаблонов, который используется во многих системных утилитах для
выполнения операций поиска и отбора при разнообразных
обработках текстовых строк. Мы начинаем изучать регулярные
выражения с применения их в утилите поиска grep.

Базовые и расширенные регулярные выражения 

grep [опции] значение [ФАЙЛ]

- grep — команда
- [опции] — модификаторы команды
- значение — поисковый запрос
- [ФАЙЛ] — файл, в котором вы выполняете поиск

Grep —может искать любой тип строки в любом файле или списке
файлов или даже выводить любую команду.

В качестве шаблона поиска Grep использует обычные регулярные


выражения и метасимволы вроде: ‘{‘, ‘}’, ‘(‘, ‘)’, ‘|’, ‘+’, ‘?’ теряют свой
смысл и считаются нормальными символами строки.

Если их следует рассматривать как специальные символы, то они


должны быть выделены специальным образом.

Если мы работаем с расширенным вариантом, тогда нет


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

Метасимволы 
---------------------------------------------------------------------------------------------------

Метасимволы - специальные символы, которые помогают создавать


более сложные поисковые выражения.

---------------------------------------------------------------------------------------------------

. будет соответствовать любому символу;

---------------------------------------------------------------------------------------------------

[ ] будет соответствовать диапазону символов;

---------------------------------------------------------------------------------------------------

[^ ] будет соответствовать всем символам, кроме указанных в скобках;

---------------------------------------------------------------------------------------------------

* будет соответствовать любому количеству символов,


предшествующих звездочке, в том числе нулю;
---------------------------------------------------------------------------------------------------

+ будет соответствовать одному или нескольким из стоящих перед


ним выражений;

---------------------------------------------------------------------------------------------------

? будет соответствовать нулю или одному из стоящих перед ним


выражений;

метасимвол ? делает предшествующий символ необязательным. В


нашем примере, регулярное выражение [I]?tachi означает:
необязательно заглавную букву I, за которой следует строчные
символы tachi.

---------------------------------------------------------------------------------------------------

{n} будет соответствовать ‘n’ повторениям предшествующих


выражений;
---------------------------------------------------------------------------------------------------

{n,} будет соответствовать не менее ‘n’ повторениям предшествующих


выражений;

Например, если написать grep ta{2,}ta 18.txt, то подходящими


вариантами будут: taata taaata taaaata.

---------------------------------------------------------------------------------------------------

{n,m} будет соответствовать не менее ‘n’ и не более ‘m’ повторениям


предшествующих выражений;

Например, если написать grep ta{2,4}ta 18.txt, то подходящими


вариантами будут: taa, taaa, taata, taaaata.

---------------------------------------------------------------------------------------------------

{,m} будет соответствовать не более или равному ‘m’ повторениям


предшествующих выражений;

Например, если написать grep ta{,3}ta 18.txt, то подходящими


вариантами будут: tta, tata, taata, taaata.

---------------------------------------------------------------------------------------------------

\ является escape-символом (символом экранирования),


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

---------------------------------------------------------------------------------------------------

Символы с обратным слешем и специальные выражения. Анкоры.


Каретка ^ и знак доллара $ являются метасимволами, которые


представляют, соответственно, начало и конец строки. Они
называются анкорами или «якоря».
^ каретка используется для поиска строк, которые начинаются с
указанного шаблона. Команда ниже выведет все строки, которые
начинаются с буквы "I".

[^] каретка в квадратных скобках используется для исключения из


поиска следующих за ней символов или диапазона символов.

$ знак доллара означает конец строки. Команда выведет только те


строки, в конце которых встречает указанный шаблон.

Символ \, когда за ним следует определённые обычные символы, принимает


специальное значение:

\b - Обозначает край слова. (может быть использован в перед или после


символа)

\B - Обозначает не край слова.


\< - Обозначает начало слова.

\> - Обозначает конец слова.

---------------------------------------------------------------------------------------------------

Классы символов 

POSIX-
Эквивалент Значение
класс

[:upper:] [A-Z] Символы верхнего регистра

[:lower:] [a-z] Символы нижнего регистра

[:alpha:] [[:upper:][:lower:]] Буквы

[:digit:] [0-9] , т. е.  \d Цифры

[:xdigit:] [[:digit:]A-Fa-f] Шестнадцатеричные цифры

[:alnum:] [[:alpha:][:digit:]] Буквы и цифры

[:word:] [[:alnum:]_] , т. е.  \w Символы, образующие «слово»

[:punct:] [-!"#$%&'()*+,./:;<=>?@[\\\]_`{|}~] Знаки пунктуации


[:blank:] [ \t] Пробел и табуляция

[:space:] [[:blank:]\v\r\n\f] , т. е.  \s Пробельные символы

[:cntrl:] [\x00-\x1F\x7F] Управляющие символы

[:graph:] [\x21-\x7E] Печатные символы

[:print:] [\x20-\x7E] , т. е.  [[:graph:] ] Печатные символы с пробелом

[:upper:] Символы верхнего регистра.

[:lower:] Символы нижнего регистра.

[:alpha:] Буквы.

[:digit:] Цифры.

[:xdigit:] Шестнадцатеричные цифры.


[:alnum:] Буквы и цифры

---------------------------------------------------------------------------------------------------

Альтернативы в регулярных выражениях 

Оператор ИЛИ. Оператор И.

Part 2. Индивидуальные задания. (Вариант 5)

21.В файле query4 выбрать все строки, в которых дата продажи не


1-е января.
В списке записей файла query4, я не нашла ни одной записи
продажи с первого января, но командная строка должна бы была
выглядеть так 

Но для демонстрации работы такого указания я выберу


существующую дату продажи 15 января и продемонстрирую то,
как она не будет отображаться после выборки.

Строка, дата продажи которой 15 янв. не отображается.

22.В файле query1 выбрать все строки, в которых должность -


'SALES PERSON'.
Здесь я использовала стандартный поиск строки по должности с
помощью функции Grep.

23.В файле query2 выбрать все строки, в которых номер телефона


заканчивается на '015'.
Последние три цифры номера телефона в файле query2
начинаются с 83 позиции. Поэтому сначала необходимо
пропустить 82 символа от начала строки ^.\{82\}. Затем должны
следовать 015:

24.В файле query3 выбрать все строки, в которых в названии нет


текста, взятый в кавычки, а в нем - слово 'GUIDE'.

Сначала пропускаю 7 символов, чтобы попасть на название,


затем выделяю 20 символов на длину наименования. А затем
кавычки, точка – обозначающая любые символы, слово - GUIDE,
снова точка и снова кавычки. Далее соответственно заданию
исключаю данные строки с помощью –v.
25.В файле query4 выбрать все строки, в которых сумма не
содержит целое число сотен.

Сумма у нас выражена в нескольких разрядах. Тысячных, сотых,


десятых и единицах. Целое число сотен определяется
количеством нулей. В нашем случае это два нуля.
Следовательно, мне стоит искать два нуля, за которыми
находится конец файла и исключить такое появление.
Вывод: выполняя эту работу я научилась выполнять поиск
определённых строк ссылаясь на необходимый критерий.
Поняла разницу между grep и egrep. Узнала, что такое и как
применяются метасимволы, а также символы с обратным слешем
и специальные выражения, якоря. А также узнала о логических
операторах в регулярных выражениях.

---------------------------------------------------------------------------------------------------

Работа над ошибками.

Ранее я неправильно трактовала канал pipe (труба) ошибочно приняв


его за оператор ИЛИ. После того как я узнала в чём заключается суть
канала pipe, я поняла, что в моём примере он не был необходимым, и
я могла обойтись обычным поиском по строкам файла. Что бы внести
ясность в то, что такое канал pipe я приведу пример его
использования.

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

Популярным примером использования канала | является ls | less.


Это связано с тем что команда ls позволяет просматривать содержимое
директорий (и е её файлов если мы используем ключ –l). Но, если
директория содержит слишком много файлов, список которых
занимает больше пространства чем один экран, тогда мы можем
использовать канал pipe и команду less. Она позволяет заполнить
только один экран, с помощью пробела мы запрашиваем следующую
страницу файлов, чтобы вернуться к предыдущей странице мы
можем воспользоваться клавишей b, а клавиша q прерывает работу
программы.

Я использовала -R команды ls чтобы отобразить содержимое


директории рекурсивно, чтобы открыть все каталоги, их подкаталоги
и так далее вплоть до файлов.
Того же результата можно достичь, если сначала перенаправить вывод
команды во временный файл, а затем просмотреть содержимое этого
файла на экране монитора.

Так же с помощью канала pipe и команды grep мы можем


организовать поиск по строкам.

Вывод: канал pipe применяется для вывода одной команды в качестве


ввода для другой программы, а оператор ИЛИ действует на
предыдущий или следующий паттерн (шаблон).

Вам также может понравиться