Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Theory regexrp OIB.doc
Скачиваний:
2
Добавлен:
13.07.2019
Размер:
58.37 Кб
Скачать

ЗАНЯТИЕ N1

Цель занятия

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

Краткая информация о семействе команд grep

Семейство команд grep состоит из команд grep, egrep и fgrep. Все три команды осуществляют поиск в файле текста на соответствие регулярному выражению и выдают найденные строки на стандартное устройство вывода. Команда egrep является расширенной версией команды grep и позволяет использовать более широкий набор метасимволов при формировании регулярного выражения. Существует свободно распространяемая версия команды grep - GNU grep, которая обычно входит в поставку ОС Linux. В ОС Sun Solaris такая реализация команды находится в каталоге /usr/xpg4/bin. GNU версия команды grep поддерживает расширенный набор метасимволов регулярных выражений, стандарт POSIX и дополнительные ключевые слова командной строки. В семейство также входит рекурсивная реализация - rgrep, которая позволяет работать с полным деревом каталога.

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

grep 'regexp' filename (egrep 'regexp' filename)

или

cat filename | grep 'regexp' (cat filename | egrep 'regexp')

или

echo $varname | grep 'regexp' (echo $varname | egrep 'regexp')

где

regexp - регулярное выражение (шаблон поиска);

filename - имя файла, в котором осуществляется поиск;

Varname - имя переменной, в значении которой осуществляется поиск.

Полный синтаксис и подробное описание команды grep или egrep можно получить выполнив команду man grep или man egrep.

Краткая информация о метасимволах регулярных выражений команды grep

^ якорный символ привязки регулярного выражения к началу строки

$ якорный символ привязки регулярного выражения к концу строки

. соответствует одному любому символу

* соответствует нулевому и более количеству повторений символа

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

[^] соответствует одному из НЕ перечисленных в скобках символу

\< якорный символ привязки регулярного выражения к началу слова

\> якорный символ привязки регулярного выражения к концу слова

\(\) запоминающие скобки

x\{m,n\} интервал повторения символа (m - минимум, n - максимум)

Краткая информация о метасимволах регулярных выражений команды egrep

^ якорный символ привязки регулярного выражения к началу строки

$ якорный символ привязки регулярного выражения к концу строки

. соответствует одному любому символу

* соответствует нулевому и более количеству повторений символа

+ соответствует одному и более количеству повторений символа

? соответствует одному или нулевому количеству повторений символа

a|b соответствует либо a либо b

() группирующие скобки

Полный синтаксис и подробное описание применения регулярных выражений можно получить выполнив команду man regexp и man regex.

Порядок проведения занятия

1. Прочитать вводную (ознакомительную) часть к домашнему заданию N1.

2. Выполнить упражнения с готовыми примерами использования регулярных выражений, объяснить результаты их выполнения и ответить на сопровождаемые их вопросы.

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

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

В примерах используются системные файлы passwd и group, находящиеся в каталоге /etc, файлы с данными, находящимися в каталоге /home/ad/re1 на сервере helios, а также данные из сетевой базы пользователей (NIS+), которые можно получить командой niscat, например:

niscat passwd.org_dir

niscat group.org_dir

niscat hosts.org_dir

Упражнения на использование команды grep

grep bin /etc/passwd

ps -ef|grep $LOGNAME

grep '^bin:' /etc/passwd

niscat passwd.org_dir|grep "^$LOGNAME"

grep NW datafile

grep NW d*

grep '^n' datafile

grep '4$' datafile

grep TB Savage datafile

grep 'TB Savage' datafile

grep '5\..' datafile

grep '\.5' datafile

grep '^[we]' datafile

grep '[^0-9]' datafile

grep '[A-Z][A-Z] [A-Z]' datafile

grep 'ss* ' datafile

grep '[a-z]\{9\}' datafile

grep '\<north' datafile

grep '\<north\>' datafile

grep '\<[a-z].*n\>' datafile

Использование ключевых слов командной строки (см. man grep)

grep -n '^south' datafile

grep -i 'pat' datafile

grep -v 'Suan Chin' datafile

grep -v 'Suan Chin' datafile > temp; cat temp

grep -l 'SE' *

grep -c 'west' datafile

grep -w 'north' datafile

Упражнения на использование команды egrep

egrep 'NW|EA' datafile

egrep '3+' datafile

egrep '2\.?[0-9]' datafile

egrep '(no)+' datafile

egrep 'S(h|u)' datafile

egrep 'Sh|u' datafile

Вопросы

Что является регулярным выражением в данном примере?

Какого типа символы использованы в данном регулярном выражении?

Как программно проанализировать код завершения команды grep?

ЗАНЯТИЕ N2

Цель занятия

Изучить потоковый редактор sed и используемый в нем диалект регулярных выражений.

Краткая информация о редакторе sed

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

Процесс, созданный для выполнения редактора sed, возвращает 0, если не найдены синтаксические ошибки, в случае обнаружения последних возвращается ненулевое значение. Команды редактирования могут быть указаны как в командной строке, так и в отдельном файле-программе. Редактор sed не изменяет исходных данных. Для сохранения изменений можно направить выходной поток в файл.

Для ограничения диапазона обрабатываемых данных может использоваться цифровая, контекстная (по регулярному выражению) или смешанная адресация строк. Без указания диапазона редактор sed обрабатывает все строки потока ввода или файла. При использование цифровой адресации цифра указывает на номер строки. Знак доллара $ может использоваться для адресации последней строки во входном потоке или в файле. Диапазон строк указывается номерами строк через запятую и включает в себя все указанные строки.

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

^ $ . * [ ] [^] \( \) \< \> \{n\} \{n,\} \{,m\} \{n,m\} &

Метасимвол & в команде s используется в строке замены для подстановки значения, которое соответствует регулярному выражению шаблона поиска.

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

sed [-n] [-e script]... [-f script_filename]... [filename...]

где

script - программа на языке sed;

script_filename - файл с программой на языке sed;

filename - имя файла, в котором осуществляется поиск.

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

sed -n '/regexp/p' filename (sed 's/regexp/repstr/' filename)

или

cat filename | sed -n '/regexp/p'

или

echo $varname | sed 's/regexp/repstr/'

где

regexp - регулярное выражение (шаблон поиска);

repstr - строка, замещаемая найденное выражение;

/ - символ-разделитель между командами редактора sed, regexp и repstr;

filename - имя файла, в котором осуществляется поиск;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]