ЗАНЯТИЕ 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 - имя файла, в котором осуществляется поиск;